3
我發現,錨固在面前的時候,不要到最後非貪婪正則表達式匹配只能成爲非貪婪:正則表達式
$ echo abcabcabc | perl -ne 'print $1 if /^(a.*c)/'
abcabcabc
# OK, greedy match
$ echo abcabcabc | perl -ne 'print $1 if /^(a.*?c)/'
abc
# YES! non-greedy match
現在看這個錨,當到底:
$ echo abcabcabc | perl -ne 'print $1 if /(a.*c)$/'
abcabcabc
# OK, greedy match
$ echo abcabcabc | perl -ne 'print $1 if /(a.*?c)$/'
abcabcabc
# what, non-greedy become greedy?
這是爲什麼?它如何不像以前那樣打印abc
?
(問題發現在我的Go代碼中,但爲了簡單起見,在Perl中進行了說明)。
'/(a.c *?)$ /'匹配'abcabcabc'中最後一個'abc'。既然你是錨定到最後,c應該是非貪婪的。 –
@AdityaJ。,Nah,你已經改變了「算法」。對於你的「解決方案」,即使沒有'*?',即'/(a.c)$ /',它仍然可以工作。但是,謝謝你嘗試。 – xpt
使用'。*?',正則表達式引擎開始匹配量詞允許的最小字符數 - **爲零**。引擎然後前進並嘗試下一個標記。這失敗了,所以引擎回溯並擴展其匹配。這個過程會重複 - 正則表達式引擎前進,失敗,回溯,再次擴展匹配,前進,失敗,...這是否定的情況'/ a [^ a] * c $ /' – hwnd