正则表达式(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

matcheslookingAt方法

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

posted @ 2022-10-30 23:22  寒小韩  阅读(234)  评论(0编辑  收藏  举报