Java 对所有格量词的再认识
我在这个网站和java教程中读了很多关于java中所有格量词的问题和答案,但是男人们,我还是很困惑!!我不明白例如,让我们说Java 对所有格量词的再认识,java,regex,quantifiers,Java,Regex,Quantifiers,我在这个网站和java教程中读了很多关于java中所有格量词的问题和答案,但是男人们,我还是很困惑!!我不明白例如,让我们说 my regex is .*+foo my input string is mdfoo 据我了解, .(dot) means there are other characters before foo *(star) means if foo should be writen in a string form if found by regex +foo mea
my regex is .*+foo
my input string is mdfoo
据我了解,
.(dot) means there are other characters before foo
*(star) means if foo should be writen in a string form if found by regex
+foo means that a string should end with foo for it to match
在我的输入字符串中,它以foo结尾。但是当我运行我的程序时收到一条声明说没有匹配!这是如何发生的?我应该如何使用(+)量词来接收匹配项?。提前感谢所有格量词暗示没有回溯 当您尝试将
mdfoo
与*+foo
匹配时会发生什么情况:
*+
)匹配整个字符串mdfoo
foo
)这些所有格量词解释得很清楚。有三种类型的量词:
- “常规”量词(*、+、?)也称为“贪婪”量词李>
- “懒惰”,量词(*?,+?,?)李>
- “所有格”量词(*+,++,?+)
The answer is 42
现在,以这个正则表达式为例:
.*(\d+)
问题是,根据您在*
中使用的*
版本,(\d+)
将捕获什么:
- 如果
,将捕获的是*
李>2
- 如果
,将捕获的是*?
李>42
- 如果
,则正则表达式不匹配*+
- 贪婪的量词吞下它能吞下的一切;然而,它在途中保留了它所匹配的位置;吞下全文后,仍有
需要匹配;它将不情愿地回溯,直到满足\d+
,并且\d+
满足\d+
李>2
- 惰性量词尝试并查询以下正则表达式标记:“如果\d+不匹配,则我吞下下下一个字符”;当遇到
时,它让4
完成它的工作,因此捕获\d+
李>42
- 所有格量词是所有格的;它的工作原理与贪婪量词相似,只是它不保留任何位置;因此,当到达末尾时,正则表达式引擎会问“好的,你能还给我吗?”,
说“不…”,因此不匹配*+
;)代码>