`
dragonhunter
  • 浏览: 33319 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

正则的贪婪和非贪婪

阅读更多

最近在弄网站的一个需求,要用到正则。顺便学习下,对贪婪和非贪婪看了半天才看懂,这里举个例子帮助自己理解下。

正则表达式模式是匹配贪婪的,也就是匹配尽可能多的。

比如字符串是aaaaa,正则是a{1,3}

则会匹配到2处,第一个是aaa,第二个是aa

如果想非贪婪匹配的话,正则是a{1,3}?

则会匹配5处,分别都是a

 

看一个java的正则的例子:

Pattern a = Pattern.compile("^1234\\d*?");
Matcher matcher = a.matcher("12341");
System.out.println(matcher.matches());

//you can use below codes with more simple
"12341".matches("^1234\\d*?").matches();

 

 

在java中正则有3种,贪婪型,勉强型(对应非贪婪型),占有型(java特有的)。

在Think in java中,对占有型的介绍是当正则表达式被应用于字符串时,它会产生相当多的状态,以便在匹配失败时可以回溯。而“占有的”量词并不保存这些中间状态,因此它们可以防止回溯。

一般是在表达式后面添加+ ,比如x{n,m}+,有点看不懂这个占有型。有大神可以给解释下吗?

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics