大家好,帮我理解一下下面的几个java里的正则表达式的意思?在java的Pattern类里出来的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大家好,帮我理解一下下面的几个java里的正则表达式的意思?在java的Pattern类里出来的相关的知识,希望对你有一定的参考价值。

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
Xn X,恰好 n 次
Xn, X,至少 n 次
Xn,m X,至少 n 次,但是不超过 m 次

Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
Xn? X,恰好 n 次
Xn,? X,至少 n 次
Xn,m? X,至少 n 次,但是不超过 m 次

Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
Xn+ X,恰好 n 次
Xn,+ X,至少 n 次
Xn,m+ X,至少 n 次,但是不超过 m 次
例如 X?? X,一次或一次也没有 为什么这样代表呢。?号不是代表的是一个字符吗?两个??为什么就成了一次或一次也没有了。再给我说说如果按它上面说的应怎么使用呢?

aaaax?bbbbb

? 限定 'x' 出现1次或0次 可匹配 "aaaaxbbbbb" 也可匹配 "aaaabbbbb"

--------------------------------

aaaax*bbbbb

* 限定 'x' 出现任意次 可匹配 "aaaabbbbb" 也可匹配 "aaaaxxxxxbbbbb" 也可匹配 "aaaaxxxxxxxxxxxxxxxbbbbb" 多少个 x 都行

--------------------------------

aaaax+bbbbb

+ 限定 'x' 出现1次或1次以上 可匹配 "aaaaxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxxxxxxxxxbbbbb"多少个 x 都行,就不能没有 'x'

--------------------------------

aaaax3bbbbb

3 限定 'x' 出现3次或3次以上 可匹配 "aaaaxxxbbbbb"

--------------------------------

aaaax3,bbbbb

3, 限定 'x' 出现3次 可匹配 "aaaaxxxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxxxxxxxxxbbbbb"多少个 x 都行,就不能小于3次

--------------------------------

aaaax3,5bbbbb

3,5 限定 'x' 出现3次至5次 可匹配 "aaaaxxxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxbbbbb" 不能小于3次,不能大于5次

--------------------------------
--------------------------------
--------------------------------
--------------------------------
--------------------------------

相信楼主能明白 ?, +, *, n, n,, n,m 的意思了

如果在限定符后边再加上一个 ?

变成 ??, +?, *?, n?, n,?, n,m?

那么它就是懒惰模式

不加的就是贪婪模式

比如有 原文: "----------AzzzzzzzzzzzzAxxxxxxxxxxA--------"

那么 表达式 "A\w*A" 会匹配 "AzzzzzzzzzzzzAxxxxxxxxxxA" 这部分
那么 表达式 "A\w*?A" 会匹配 "AzzzzzzzzzzzzA" 这部分

贪梦模式, 尽可能多的匹配

懒惰模式, 尽可能少的匹配

参考资料:http://www.iscripts.org/forum.php?mod=viewthread&tid=3

参考技术A 问号是说,前面的那个字符,出现0次或1次。X??,第二个问号是非贪婪匹配的意思,就是说,可以匹配多次,也可以匹配少次的时候,只匹配少次。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.w3c.dom.NodeList;

public class RegTeest

public static void main(String[] args)

String s = "123good456";
Pattern pattern = Pattern.compile("goo??");
Matcher matcher = pattern.matcher(s);
while(matcher.find())
System.out.println("|" + matcher.group() + "|");



结果是|go|
如果用一个问号,结果是|goo|

如何理解Python中的正则表达式

今天小编要跟大家分享的文章是如何理解Python中的正则表达式(2)?上节课我们简单认识了一下Python中的正则表达式,这节课我们继续了解Python正则表达式的相关内容,Python入门新手和正在Python学习的小伙伴快来看一看吧,希望能够对大家有所帮助 !

今天为大家解决上节课中的部分疑问,比如r代表什么,来一起学习吧:

有同学问起昨天那段测试代码里的问题,我来简单说一下。

技术图片
 
 

1.

r”hi”

这里字符串前面加了r,是raw的意思,它表示对字符串不进行转义。为什么要加这个?你可以试试print “hi”和r”hi”的区别。

>>> print "hi"

hi

>>> print r"hi"

hi

可以看到,不加r的话,就没有了。因为Python的字符串碰到“”就会转义它后面的字符。如果你想在字符串里打“”,则必须要打“\”。

>>> print "\bhi"

hi

这样的话,我们的正则表达式里就会多出很多“”,让本来就已经复杂的字符串混乱得像五仁月饼一般。但加上了“r”,就表示不要去转义字符串中的任何字符,保持它的原样。

2.

re.findall(r"hi", text)

re是Python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。

3.

今天主要说两个符号“.”和“*”,顺带说下“S”和“?”。

“.”在正则表达式中表示除换行符以外的任意字符。在上节课提供的那段例子文本中:

Hi, I am Shirley Hilton. I am his wife.

如果我们用“i.”去匹配,就会得到

[‘i,‘, ‘ir‘, ‘il‘, ‘is‘, ‘if‘]

你若是暴力一点,也可以直接用“.”去匹配,看看会得到什么。

与“.”类似的一个符号是“S”,它表示的是不是空白符的任意字符。注意是大写字符S。

4.

在很多搜索中,会用“?”表示任意一个字符,“*”表示任意数量连续字符,这种被称为通配符。但在正则表达式中,任意字符是用“.”表示,而“*”则不是表示字符,而是表示数量:它表示前面的字符可以重复任意多次(包括0次),只要满足这样的条件,都会被表达式匹配上。

结合前面的“.*”,用“I.*e”去匹配,想一下会得到什么结果?

[‘I am Shirley Hilton. I am his wife‘]

是不是跟你想的有些不一样?也许你会以为是

[‘I am Shirle‘, ‘I am his wife‘]

这是因为“*”在匹配时,会匹配尽可能长的结果。如果你想让他匹配到最短的就停止,需要用“.*?”。如“I.*?e”,就会得到第二种结果。这种匹配方式被称为懒惰匹配,而原本尽可能长的方式被称为贪婪匹配。

最后留一道习题:

从下面一段文本中,匹配出所有s开头,e结尾的单词。

site sea sue sweet see case sse ssee loses.

恭喜你在Python的道路上又坚持了一天,将我们的每节课中的每一个案例都进行实际操作练习,还可以再找些其他练习进行实践操作,你就会理解、掌握他们哦。

以上就是小编今天为大家分享的关于如何理解Python中的正则表达式(2)的文章,希望本篇文章能够对正在 Python学习 和从事Python相关工作的小伙伴们有所帮助,想要了解更多相关知识记得关注马哥教育官网。最后祝愿小伙伴们工作顺利!

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

以上是关于大家好,帮我理解一下下面的几个java里的正则表达式的意思?在java的Pattern类里出来的的主要内容,如果未能解决你的问题,请参考以下文章

如何理解Python中的正则表达式

java怎样通过正则表达式判断下面的IP

面向对象与正则表达式的学习(自动更正,和代数运算)

PHP正则表达式

PHP的正则表达式

PHP 正则表达式