2010-08-06 23 views
0

我根本不明白錨是如何做的。正則表達式中的 G錨的用途

如果我在1122aa33上執行/\G\d\d/,它將匹配1122。但是,當我在1122aa33上嘗試/\d\d\G/時,它什麼都不匹配。

有人能夠啓發我嗎?

回答

2

\Ganchor which matches the previous match position

第一次通過時,\G相當於\A,這是字符串定位的開始。由於\d\d\A永遠不會匹配任何東西(因爲如何在字符串開始之前有兩位數字?),\d\d\G也不會匹配任何內容。

+0

這樣意思\ G只用來檢查以前的匹配嗎?所以\ d \ d \ G是純粹無效的語法正確嗎? – slier 2010-08-06 21:18:22

+4

它本身並不是無效的,但它沒有意義。基本上,正則表達式引擎會在找到匹配項後繼續評估您的字符串,或者查看是否可以擴展該匹配項(即使用'abc'字符串的'/.*/'將首先匹配'a',然後展開匹配到'ab',然後匹配'abc')或者是否可以找到任何其他匹配。在後一種情況下,'\ G'指定後續匹配必須在前一次匹配之後開始。 – 2010-08-06 21:23:00

+0

是的,你的措辭更好一些:它確實**不**無效。 – 2010-08-06 21:28:33

1

Reference link

它基本上與「前的比賽」,這對正則表達式的第一次運行被認爲是字符串的開始的結束相匹配。

換句話說,如果您在字符串1122aa33上運行了兩次/\G\d\d/,則第二次運行將在22上返回一個匹配項。

1

根據this

錨\處的G,其中在以前的匹配結束的位置相匹配。 在第一次匹配嘗試期間,\ G會以\ A的方式在字符串的開始處匹配\ G。

現在,真正回答你的問題:在你的第二個例子,是產生沒有結果的一個,\ G能夠不匹配字符串的開始,因爲你正在尋找兩位數第一,而且,沒有初始匹配,\ G也不會匹配其他任何內容。