前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式的贪婪和非贪婪模式

正则表达式的贪婪和非贪婪模式

作者头像
bisal
发布2021-10-13 11:18:48
2.1K0
发布2021-10-13 11:18:48
举报

最近在写程序时,碰到一个场景,需要找到一个字符串中指定的一个片段,而不是所有片段,这就涉及到正则表达式中贪婪和非贪婪两种模式。

字面意思上,正则表达式一般趋向于最大长度匹配,就是贪婪模式。匹配到结果就好,就少的匹配字符,就是非贪婪模式

直接上个例子,

代码语言:javascript
复制
String str="abcaxc";
Patter p="ab.*c";

如果是贪婪模式,上面使用模式p匹配字符串str,结果就是匹配到:abcaxc,匹配到了所有的字符串。

如果是非贪婪模式,上面使用模式p匹配字符串str,结果就是匹配到:abc,只匹配到了部分的字符串。

编程中怎样区分这两种模式?

默认情况下,正则用的都是贪婪模式,如果要使用非贪婪模式,需要在量词后面直接加上一个问号"?",量词包括如下,

(1) {m,n}:m到n个。

(2) *:任意多个。

(3) +:一个到多个。

(4) ?:0或一个。

再上个程序,用贪婪和非贪婪模式找到content中的内容,

代码语言:javascript
复制
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularTest {
  public static void main(String[] arg) {
    String text = "(content:\"hello root\";hello:\"word\";)";
    String rule1 = "content:\".+\"";  // 贪婪模式
    String rule2 = "content:\".+?\""; // 非贪婪模式


    System.out.println("文本:" + text);
    System.out.println("贪婪模式:" + rule1);
    Pattern p1 = Pattern.compile(rule1);
    Matcher m1 = p1.matcher(text);
    while (m1.find()) {
      System.out.println("匹配结果:" + m1.group(0));
    }


    System.out.println("非贪婪模式:" + rule2);
    Pattern p2 = Pattern.compile(rule2);
    Matcher m2 = p2.matcher(text);
    while (m2.find()) {
      System.out.println("匹配结果:" + m2.group(0));
    }
  }
}

如果是贪婪模式,返回两个字符串,而非贪婪模式,则只返回第一个,

代码语言:javascript
复制
文本:(content:"hello root";hello:"word";)
贪婪模式:content:".+"
匹配结果:content:"hello root";hello:"word"
非贪婪模式:content:".+?"
匹配结果:content:"hello root"

针对不同场景,我们就可以选择合适的模式。

参考资料,

https://www.cnblogs.com/xudong-bupt/p/3586889.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最近在写程序时,碰到一个场景,需要找到一个字符串中指定的一个片段,而不是所有片段,这就涉及到正则表达式中贪婪和非贪婪两种模式。
  • 字面意思上,正则表达式一般趋向于最大长度匹配,就是贪婪模式。匹配到结果就好,就少的匹配字符,就是非贪婪模式。
  • https://www.cnblogs.com/xudong-bupt/p/3586889.html
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档