正則表達式 “(\\w)\\1” 可以匹配 "aa bbbb abcdefg 111121111" 中的多個字符, 那么“(\\w)\\1\\2”可以匹配什么呢? 下面每段內(nèi)容分別為不同網(wǎng)友的回答,其中最有用的正解,已注明:
( )表示子表達式 注意:和 [ ] 的區(qū)別,[ ]只能匹配單個字符,( )可以匹配多個字符 。 \1表示的是第一個子表達式匹配到的結(jié)果, 而不是第一個子表達式匹配到的結(jié)果的第一個字符, 這點很重要也很容易搞混了, 也就是代表第一個( ),相應(yīng)的 \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 -- 正解??!】 當(dāng)使用小括號指定一個子表達式時,即可得到匹配的文本,即分組的內(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)的子表達式
|