正則表達式 “(\\w)\\1” 可以匹配 "aa bbbb abcdefg 111121111" 中的多個字符,
那么“(\\w)\\1\\2”可以匹配什么呢?
下面每段內(nèi)容分別為不同網(wǎng)友的回答,其中最有用的正解,已注明:
( )表示子表達式
注意:和 [ ] 的區(qū)別,[ ]只能匹配單個字符,( )可以匹配多個字符 。
\1表示的是第一個子表達式匹配到的結(jié)果,
而不是第一個子表達式匹配到的結(jié)果的第一個字符,
這點很重要也很容易搞混了,
也就是代表第一個( ),相應的 \2 就代表第二( ),依次類推。
表達式后邊的部分,可以引用前面 "括號內(nèi)的子匹配,已經(jīng)匹配到的字符串"。
引用方法是 "\" 加上一個數(shù)字。
\1\2:
"\1" 引用第1對括號內(nèi)匹配到的字符串,
"\2" 引用第2對括號內(nèi)匹配到的字符串。
反向引用和正向引用是一樣的,都是引用前面已經(jīng)匹配了的值。
所以\1引用的是第一個括號里的內(nèi)容,即\w匹配的內(nèi)容。
而由于你沒有第二個括號,所以\2什么也不匹配。
【lsl -- 正解啊!】
當使用小括號指定一個子表達式時,即可得到匹配的文本,即分組的內(nèi)容。
規(guī)則從左到右,以分組的左括號為標志,第一個出現(xiàn)的分組組號為1,類類推。
\1是 \w 匹配的內(nèi)容,即整個字符串“aa bbbb abcdefg 111121111”
由于沒有第二個分組,所以\2匹配為空。
其實反向引用在實現(xiàn)上和匿名捕獲的實現(xiàn)方式很相似
(其名字其實就是\1 \2,我寫的正則表達式的引擎里是這么做的,
其他大的庫我沒有做研究,不過從原理上猜測是一樣的)。
\1\2就是前面出現(xiàn)的()括起來順序出現(xiàn)的子表達式
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。