簡體   English   中英

理解占有量詞,java正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM