正则表达式(JAVA)详解
正则表达式
正则表达式常用字符
| 符号 | 含义 | 示例 |
|---|---|---|
| . | 任意一个字符 | |
| \ | 转意字符 | |
| \d | 任意一个数字 | |
| \w | 任意一个单词字符(数字、字母、下划线) | |
| \s | 任意一个空白字符(空格、制表符、换行) | |
| \D | 任意一个非数字字符 | |
| \W | 任意一个非单词字符 | |
| \S | 任意一个非空白字符 | |
| + | 前面的字符必须至少出现一次(1次或多次) | runoo+b,可以匹配 runoob、runooob、runoooooob 等 |
| * | 前面的字符可以不出现,也可以出现一次或者多次 | runoo*b,可以匹配 runob、runoob、runoooooob 等 |
| ? | 前面的字符最多只可以出现一次(0次、或1次) | colou?r 可以匹配 color 或者 colour |
| {n} | 表示前面的字符必须出现n次 | |
| {m,n} | 表示前面的字符必须出现m-n次 | |
| {n,} | 表示前面的字符必须出现至少n次 | |
| {,n} | 表示它前面的东西最多出现n次 | |
| ^ | 表示要以^后的字符开始 | |
| $ | 表示要以$前的字符结束 | |
| [ab1] | 代表a或b或者1 | |
| [a-c] | 代表a,b,c中的任意一个字符 | |
| [a-c1-3] | 代表a,b,c,1,2,3中任意一个字符 | |
| [^a-c] | 代表不含a,b,c的其他任意一个字符 | |
| [a-g&&[^b-d]] | 代表a,e,f,g中的任意一个字符。 | |
| com|org|cn | 代表包含其中之一 |
其中( )是用来分组的,也就是把匹配到的内容分成几个部分。在使用Matcher类来获取匹配到的分组数据时,匹配到的整个字符串默认为第0组,所以自己定义的组别要从第1组算起。
正则表达式在java中的使用
java.util.regex包
java.util.regex 包主要包括以下三个类:
-
Pattern类:
pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。 -
Matcher类:
Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。 -
PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
/* import java.util.regex.*; */
public void RegexExample() {
String input = "I am Jimmy from mp.csdn.net";
String regex = ".*csdn.*";
// 方式1:String 的 matches 方法
boolean flag1 = input.matches(regex);
// 方式2:Pattern 对象的 matches 方法
boolean flag2 = Pattern.matches(regex, input);
// 方式3: Matcher 对象的 matches 方法
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
boolean flag3 = m.matches();
System.out.println("字符串中是否包含了'csdn'子字符串? " + flag1 );
System.out.println("字符串中是否包含了'csdn'子字符串? " + flag2 );
System.out.println("字符串中是否包含了'csdn'子字符串? " + flag3 );
}
输出结果:
字符串中是否包含了'csdn'子字符串? true
字符串中是否包含了'csdn'子字符串? true
字符串中是否包含了'csdn'子字符串? true
matches 和 lookingAt方法
matches() 和 lookingAt()方法都用来尝试匹配一个输入序列模式。不同的是 matches()要求整个序列都匹配,而 lookingAt()不要求;
lookingAt()方法虽然不需要整句都匹配,但是需要从第一个字符开始匹配;
public void matchAndLookingExample() {
String REGEX = "foo";
String INPUT = "foooooooooo";
String INPUT2 = "ooooofoooooo";
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(INPUT);
Matcher matcher2 = pattern.matcher(INPUT2);
System.out.println("lookingAt(): "+matcher.lookingAt());
System.out.println("matches(): "+matcher.matches());
System.out.println("lookingAt(): "+matcher2.lookingAt());
}
输出结果:
lookingAt(): true // 开头匹配
matches(): false // 不是整个序列都匹配
lookingAt(): false // 开头不匹配
参考:
(1)菜鸟教程 https://www.runoob.com/java/java-regular-expressions.html
(2)Java 正则表达式:语法讲解和常用表达式汇总——Jimmy大叔 https://blog.csdn.net/weixin_44259720/article/details/88179885

浙公网安备 33010602011771号