我已经在本网站和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 means that a string should end with foo for it to match
在我的输入字符串中,它以foo结尾。但当我收到一份声明,说我运行我的程序时没有匹配!这是怎么回事?我应该怎样做仍然使用(+)量词来接收匹配?提前谢谢
答案 0 :(得分:0)
占有量词意味着没有回溯。
当您尝试将mdfoo
与.*+foo
匹配时会发生什么:
.*+
)匹配整个字符串mdfoo
foo
)这些占有量词很清楚地解释here。
答案 1 :(得分:0)
有三种类型的量词:
例如,请输入以下内容:
The answer is 42
现在,拿这个正则表达式:
.*(\d+)
问题是,(\d+)
根据您在*
中使用的.*
版本将捕获的内容:
*
,将会捕获的内容为2
; *?
,将会捕获的内容为42
; *+
,正则表达式与不匹配。为什么:
\d+
匹配;它将不情愿地回溯,直到\d+
满意为止,\d+
对2
感到满意; 4
时,\d+
让42
完成工作,因此会抓取.*+
;