一、正则表达式中的一些重点语法
- 重复次数限定符
代码 | 说明 | 等价于 |
{n} | 重复n次 | |
{n,} | 重复至少n次 | |
{n,m} | 重复n到m次 | |
{1,} | 重复至少一次 | + |
{0,} | 重复任意次 | * |
{0,1} | 重复零次或一次 | ? |
- 贪婪与懒惰
1)贪婪匹配:当正则表达式中包含重复次数限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
2)懒惰匹配:在重复次数限定符后面加上?号,如下表格
代码 | 说明 |
+? | 重复至少一次,但尽可能少重复 |
*? | 重复任意次,但尽可能少重复 |
?? | 重复零次或一次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
- 零宽断言
代码 | 说明 |
(?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 |
(?!exp) | 匹配后面跟的不是exp的位置 |
(?<!exp) | 匹配前面不是exp的位置 |
二、Java中正则表达式的使用
主要运用java.util.regex包下的两个类:Pattern类和Matcher类
(一)利用正则表达式匹配字符
主要分以下两步:
第一步:使用Pattern类构建正则表达式,并开启相应模式
第二步:通过匹配引擎Matcher类去查找
public class Test
{
public static void main(String[] args)
{
String str = "abcdefghijk12345678abcd1234"; // 待匹配字符串
Pattern p = Pattern.compile("\\d{4}"); // 第一步:构建正则表达式
Matcher m = p.matcher(str); // 第二步:构建匹配引擎
System.out.println(m.matches()); // matches()的作用是匹配整个字符串是否符合正则表达式,这里不符合,返回false
System.out.println(m.find()); // find()的作用是查找子字符串是否符合正则表达式,这里符合,返回true
while(m.find()){
System.out.println(m.group());//打印5678和1234,因为上文已经调用了一次m.find(),匹配了1234,所以从后面继续往下匹配
}
}
}
(二)利用正则表达式替换匹配的字符
public class Test
{
public static void main(String[] args)
{
String strBefore = "其他字符abcd123456待替换字符123456abcd其他字符"; // 待匹配字符串
// 【1】构建正则表达式
Pattern p = Pattern.compile("待替换字符");
// 【2】构建匹配引擎
Matcher m = p.matcher(strBefore);
// 【3】替换字符
String strAfter = m.replaceAll("替换之后的字符");
System.out.println(strAfter);// 打印出“其他字符abcd123456替换之后的字符123456abcd其他字符”
}
}