JAVA中正则表达式

一、有关的正则表达式符号

预定义字符类

.

任何字符(与行结束符可能匹配也可能不匹配)

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

空白字符:[ \t\n\x0B\f\r]

\S

非空白字符:[^\s]

\w

单词字符:[a-zA-Z_0-9]

\W

非单词字符:[^\w]

System.out.println("a".matches("."));

System.out.println("1".matches("\\d"));

System.out.println("%".matches("\\D"));

System.out.println("\r".matches("\\s"));

System.out.println("^".matches("\\S"));

System.out.println("a".matches("\\w"));

 

Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好n

X{n,}

X,至少n

X{n,m}

X,至少n次,但是不超过m

System.out.println("a".matches(".") );

System.out.println("a".matches("a") );

System.out.println("a".matches("a?") );

System.out.println("aaa".matches("a*") );

System.out.println("".matches("a+") );

System.out.println("aaaaa".matches("a{5}") );

System.out.println("aaaaaaaaa".matches("a{5,8}") );

System.out.println("aaa".matches("a{5,}") );

System.out.println("aaaaab".matches("a{5,}") );

 

范围表示

[abc]

abc(简单类)

[^abc]

任何字符,除了 abc(否定)

[a-zA-Z]

a zAZ,两头的字母包括在内(范围)

[a-d[m-p]]

a dmp[a-dm-p](并集)

[a-z&&[def]]

def(交集)

[a-z&&[^bc]]

a z,除了bc[ad-z](减去)

[a-z&&[^m-p]]

a z,而非mp[a-lq-z](减去)

 

 

System.out.println( "a".matches("[a]") );

System.out.println( "aa".matches("[a]+") );

System.out.println( "abc".matches("[abc]{3,}") );

System.out.println( "abc".matches("[abc]+") );

System.out.println( "dshfshfu1".matches("[^abc]+") );

System.out.println( "abcdsaA".matches("[a-z]{5,}") );

System.out.println( "abcdsaA12".matches("[a-zA-Z]{5,}") );

System.out.println( "abcdsaA12".matches("[a-zA-Z0-9]{5,}") );

System.out.println( "abdxyz".matches("[a-c[x-z]]+"));

System.out.println( "bcbcbc".matches("[a-z&&[b-c]]{5,}"));

System.out.println( "tretrt".matches("[a-z&&[^b-c]]{5,}"));

二、应用

1、需求:获取由3个字母组成的单词。

public static void getDemo()
	{
		String str = "da jia zhu yi le,ming tian bu fang jia,xie xie!";
		//想要获取由3个字母组成的单词。
		//刚才的功能返回的都是一个结果,只有split返回的是数组,但是它是把规则作为分隔符,不会获取符合规则的内容。
		//这时我们要用到一些正则对象。
		String reg = "\\b[a-z]{3}\\b";
		Pattern p = Pattern.compile(reg);
		Matcher m = p.matcher(str);
		while(m.find())
		{
			System.out.println(m.start()+"...."+m.end());
			System.out.println("sub:"+str.substring(m.start(),m.end()));
			System.out.println(m.group());
		}
//		System.out.println(m.find());//将规则对字符串进行匹配查找。
//		System.out.println(m.find());//将规则对字符串进行匹配查找。
//		System.out.println(m.group());//在使用group方法之前,必须要先找,找到了才可以取。
	}

2、校验邮件

public static void checkMail()
	{
		String mail = "abc123@sina.com.cn";
		mail = "1@1.1";
		String reg = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
		reg = "\\w+@\\w+(\\.\\w+)+";//简化的规则。笼统的匹配。
		boolean b = mail.matches(reg);
		System.out.println(mail+":"+b);
	}

3、网络爬虫

class GetMailList 
{
	public static void main(String[] args) throws Exception
	{
		String reg = "\\w+@[a-zA-Z]+(\\.[a-zA-Z]+)+";
		getMailsByWeb(reg);
	}
	
	
	public static void getMailsByWeb(String regex)throws Exception
	{
		URL url = new URL("http://localhost:8080/myweb/mail.html");
		
		URLConnection conn = url.openConnection();
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		String line = null;
		Pattern p = Pattern.compile(regex);		
		while((line=bufIn.readLine())!=null)
		{
			//System.out.println(line);
			Matcher m = p.matcher(line);
			while(m.find())
			{
				System.out.println(m.group());
			}
		}
		bufIn.close();
	}
	public static void getMails(String regex)throws Exception
	{
		BufferedReader bufr = 
			new BufferedReader(new FileReader("mail.txt"));
		String line = null;
		Pattern p = Pattern.compile(regex);		
		while((line=bufr.readLine())!=null)
		{
			//System.out.println(line);
			Matcher m = p.matcher(line);
			while(m.find())
			{
				System.out.println(m.group());
			}
		}
		bufr.close();
	}
}



Java中,正则表达式是一种强大的工具,用于匹配和操作字符串。Java提供了java.util.regex包来支持正则表达式的使用。 正则表达式由一系列字符组成,用于描述字符串的模式。在Java中,可以使用正则表达式进行以下操作: 1. 匹配:使用`matches()`方法可以判断一个字符串是否与指定的正则表达式匹配。例如,`str.matches("abc")`可以判断字符串`str`是否与模式"abc"匹配。 2. 查找:使用`Pattern`和`Matcher`类可以在字符串中查找与正则表达式匹配的子串。首先,使用`Pattern.compile()`方法编译正则表达式,然后使用`Matcher`类的`find()`方法进行查找。例如: ```java String regex = "a*b"; String input = "aabfooaabfooabfoob"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.println("Found: " + matcher.group()); } ``` 上述代码将输出所有与正则表达式"a*b"匹配的子串。 3. 替换:使用`replaceAll()`方法可以将字符串中与正则表达式匹配的部分替换为指定的字符串。例如,`str.replaceAll("a+", "b")`将字符串`str`中的所有连续的字母"a"替换为"b"。 4. 分割:使用`split()`方法可以根据正则表达式将字符串分割为多个子串。例如,`str.split("\\s+")`将字符串`str`按照一个或多个空格进行分割。 5. 其他操作:Java正则表达式还支持字符类、边界匹配、量词、分组等高级特性,可以实现更复杂的匹配和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值