我根本不明白錨是如何做的。正則表達式中的 G錨的用途
如果我在1122aa33
上執行/\G\d\d/
,它將匹配11
和22
。但是,當我在1122aa33
上嘗試/\d\d\G/
時,它什麼都不匹配。
有人能夠啓發我嗎?
我根本不明白錨是如何做的。正則表達式中的 G錨的用途
如果我在1122aa33
上執行/\G\d\d/
,它將匹配11
和22
。但是,當我在1122aa33
上嘗試/\d\d\G/
時,它什麼都不匹配。
有人能夠啓發我嗎?
\G
是anchor which matches the previous match position。
第一次通過時,\G
相當於\A
,這是字符串定位的開始。由於\d\d\A
永遠不會匹配任何東西(因爲如何在字符串開始之前有兩位數字?),\d\d\G
也不會匹配任何內容。
它基本上與「前的比賽」,這對正則表達式的第一次運行被認爲是字符串的開始的結束相匹配。
換句話說,如果您在字符串1122aa33
上運行了兩次/\G\d\d/
,則第二次運行將在22
上返回一個匹配項。
根據this:
錨\處的G,其中在以前的匹配結束的位置相匹配。 在第一次匹配嘗試期間,\ G會以\ A的方式在字符串的開始處匹配\ G。
現在,真正回答你的問題:在你的第二個例子,是產生沒有結果的一個,\ G能夠不匹配字符串的開始,因爲你正在尋找兩位數第一,而且,沒有初始匹配,\ G也不會匹配其他任何內容。
這樣意思\ G只用來檢查以前的匹配嗎?所以\ d \ d \ G是純粹無效的語法正確嗎? – slier 2010-08-06 21:18:22
它本身並不是無效的,但它沒有意義。基本上,正則表達式引擎會在找到匹配項後繼續評估您的字符串,或者查看是否可以擴展該匹配項(即使用'abc'字符串的'/.*/'將首先匹配'a',然後展開匹配到'ab',然後匹配'abc')或者是否可以找到任何其他匹配。在後一種情況下,'\ G'指定後續匹配必須在前一次匹配之後開始。 – 2010-08-06 21:23:00
是的,你的措辭更好一些:它確實**不**無效。 – 2010-08-06 21:28:33