栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java(60):Java 正则表达式(Pattern和Matcher)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java(60):Java 正则表达式(Pattern和Matcher)

Java(60):Java 正则表达式

一、Pattern类和Matcher类

Java的正则表达式是由java.util.regex的Pattern和Matcher类实现的。Pattern对象表示经编译的正则表达式。静态的compile( )方法负责将表示正则表达式的字符串编译成Pattern对象。

####只要给Pattern.matcher( )方法传一个字符串就能获得Matcher对象。接下来就能用Matcher的方法来查询匹配的结果了###。

boolean matches()
boolean lookingAt()
boolean find()
boolean find(int start)

Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()

Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false 
matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true 

lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true 

find()对字符串进行匹配,匹配到的字符串可以在任何位置

Mathcer.start()/ Matcher.end()/ Matcher.group()

当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息. 
start()返回匹配到的子字符串在字符串中的索引位置. 
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 
group()返回匹配到的子字符串 

Mathcer类还有一个groupCount()用于返回有多少组。

只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用.

1、Pattern类的matches()示例:

 .*name.* 用于查找字符串中是否包了name 子串

String pattern = ".*name.*";
String content = "my name is ${name}";

boolean flag = Pattern.matches(pattern, content);
System.out.println(flag);

打印:true

2、Pattern类Pattern.matcher( )方法创建Matcher对象。 2.1、Matcher类的matches 和 lookingAt 方法示例

matches 和 lookingAt 方法都用来尝试匹配一个输入序列模式。它们的不同是 matches 要求整个序列都匹配,而lookingAt 不要求。

lookingAt 方法虽然不需要整句都匹配,但是需要从第一个字符开始匹配。

这两个方法经常在输入字符串的开始使用。

// 创建 Pattern 对象
Pattern p=Pattern.compile("\$\{(.*?)\}");  
//创建Matcher对象
Matcher m1=p.matcher("my name is ${name}");
Matcher m2=p.matcher("${name} is hu");
System.out.println(m1.lookingAt());    //从第一个字符开始匹配,第一个未匹配到
System.out.println(m2.lookingAt());    //要求整个序列都匹配
System.out.println(m2.matches());      //要求整个序列都匹配,正好从第一个开始匹配到了。

打印:

false
true
false

2.2、Matcher类的find()示例

Matcher.find( )的功能是发现CharSequence里的,与pattern相匹配的多个字符序列

        //创建Pattern对象
        Pattern p=Pattern.compile("\$\{(.*?)\}");
        //创建Matcher对象
        Matcher m1=p.matcher("my name is ${name}");
        System.out.println(m1.find());

打印:true

m1.find()只会执行一次,如果前面需要打印,下面还需要遍历,建议此处用boolean flag获取后,再打印。

2.3、find()捕获组

find( )像一个迭代器,从头到尾扫描一遍字符串。第二个find( )是带int参数的,正如你所看到的,它会告诉方法从哪里开始找——即从参数位置开始查找。

        //创建Pattern对象
        Pattern p=Pattern.compile("\$\{(.*?)\}");
        //创建Matcher对象
        Matcher m1=p.matcher("my name is ${name}");
        while(m1.find()) {
            System.out.println("Found value: " + m1.group());
            System.out.println("Found value: " + m1.group(0));
            System.out.println("Found value: " + m1.group(1) );
        }

打印:

Found value: ${name}                --->匹配全值
Found value: ${name}                --->匹配全值
Found value: name                    --->匹配(.*?)里的值。

备注:

Groups

Group是指里用括号括起来的,能被后面的表达式调用的正则表达式。Group 0 表示整个表达式,group 1表示第一个被括起来的group,以此类推。所以;

A(B(C))D

里面有三个group:group 0是ABCD, group 1是BC,group 2是C。

你可以用下述Matcher方法来使用group:

public int groupCount( )返回matcher对象中的group的数目。不包括group0。

public String group( ) 返回上次匹配操作(比方说find( ))的group 0(整个匹配)

public String group(int i)返回上次匹配操作的某个group。如果匹配成功,但是没能找到group,则返回null。

public int start(int group)返回上次匹配所找到的,group的开始位置。

public int end(int group)返回上次匹配所找到的,group的结束位置,最后一个字符的下标加一。

 基础知识参考:Java 正则表达式 | 菜鸟教程

https://www.runoob.com/java/java-regular-expressions.html

JAVA 正则表达式 (超详细) - wangxuanyou - 博客园

https://www.cnblogs.com/xyou/p/7427779.html

Java 正则表达式的用法和实例_Lemon-CSDN博客_java 正则表达式

https://blog.csdn.net/weixin_43860260/article/details/91417485

JAVA正则表达式:Pattern类与Matcher类详解(转) - ggjucheng - 博客园

https://www.cnblogs.com/ggjucheng/p/3423731.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号