確定我得到從正則表達式食譜這個例子先行混亂
^(?=.{3}$).*
正則表達式以上是使用限制的任意圖案
的長度如果我再次「AAABBB」測試,它完全失敗
從我的理解它尋找一個任意字符3 length.SO之前應該符合「BBB」,但它不是
一個問題,壽任何字符ld lookbehind遵循這種模式x(?= x)
確定我得到從正則表達式食譜這個例子先行混亂
^(?=.{3}$).*
正則表達式以上是使用限制的任意圖案
的長度如果我再次「AAABBB」測試,它完全失敗
從我的理解它尋找一個任意字符3 length.SO之前應該符合「BBB」,但它不是
一個問題,壽任何字符ld lookbehind遵循這種模式x(?= x)
這實際上是一個前瞻斷言而不是後置斷言。 ^在字符串的起始處錨定匹配,然後聲明字符串的開頭必須跟着3個字符,後面跟着字符串的結尾。
編輯:我應該可能已經提到,*末尾用於匹配這三個字符,因爲前瞻斷言不會消耗任何字符。
你的意思是不消耗任何字符? – slier 2010-08-16 18:35:12
我的意思是,在完成lookahead斷言之後,正則表達式引擎繼續比較它進入lookahead的點的字符串。所以給定模式'^(?= foo)(。*)$'和輸入'foobar'由捕獲組1捕獲的值將是'foobar'。該模式將首先執行向前看,即檢查字符串的開始是否爲foo,然後它將移到'。*'上,因爲lookahead不消耗任何字符,這意味着與。*匹配的第一個字母是然後等到它捕捉到'foobar' – 2010-08-16 18:43:34
從我的理解是尋找那些在length.SO任何字符3之前,應該符合「BBB」,但它不是
都能跟得上任何字符!讓我們來仔細看看...
^ # The caret is an anchor which denotes "STARTS WITH"
(?= # lookahead
. # wildcard match; the . matches any non-new-line character
{3} # quantifier; exactly 3 times
$ # dollar sign; I'm not sure if it will act as an anchor but if it did it would mean "THE END"
) # end of lookbehind
. # wildcard match; the . matches any non-new-line character
* # quantifier; any number of times, including 0 times
幾個問題:
.*
是字符串中的第一個字符,然後你想回顧後他們之間sandwhiched字符開始^
和第一個字符.*
。.{3}
實際上意味着任何三個字符,任何字符重複三次;)你真的想知道How can I find repeated letters with a Perl regex?
你所使用的先行斷言,因爲它看起來在那個還沒有消耗字符。後顧斷言會查看已經消耗的字符。 – Gumbo 2010-08-16 18:22:33
但是你究竟想要完成什麼? – Gumbo 2010-08-16 18:22:55
編輯:限制任意模式的長度 – slier 2010-08-16 18:27:40