![](/img/trans.png)
[英]Java regex very slow (translate nested quantifiers to possessive quantifiers)
[英]Understanding possessive quantifiers, java regex
我理解一個正面的正則表達式會到達文本的末尾,並且不會回溯以查看在結束之前是否存在匹配。 如果最后有一個匹配則返回true,否則它會立即返回false。 我踩過這個:
Pattern patt = Pattern.compile(".*+foo");
Matcher matcher = patt.matcher("xxfooxxxxxfooxxxfoo");
while (matcher.find())
System.out.println(matcher.group());
即使最后有一場比賽,它也沒有給我任何幫助。 有什么想法嗎?
另外我理解為了使正則表達式懶惰/占有欲我在第一個量詞之后添加?/ +(即*?或* +)。 那正確嗎? 謝謝!
即使最后有一場比賽,它也沒有給我任何幫助。 有什么想法嗎?
.*+
將匹配整個輸入字符串(包括最后一個foo
)。 並且因為它不會從字符串的末尾回溯,所以正則表達式.*+foo
不匹配。
另外我理解為了使正則表達式懶惰/占有欲我在第一個量詞之后添加?/ +(即*?或* +)。 那正確嗎?
占有欲的反面部分並不是懶惰的。 這將是貪婪的,默認情況下是*
。
因此,正則表達式.*?foo
將匹配"xxfoo"
,而正則表達式.*foo
將匹配"xxfooxxxxxfooxxxfoo"
。
占有量詞不會放棄回溯的匹配。 .*+
匹配你的整個字符串,然后沒有什么可以匹配的foo
。
呃,像巴特說的那樣。 :)
只有當你知道你所匹配的東西永遠不會被回溯時才使用占有量詞(例如, [^f]*+.*foo
或者,如果你知道唯一的“f”字符將在“foo”的開頭, [^f]*+foo
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.