电竞比分网-中国电竞赛事及体育赛事平台

分享

Java 正則表達式 ~ 反向引用 1 (作者:梨多情)

 bleach尸魂界 2014-07-01


正則表達式 “(\\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)的子表達式

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多