簡體   English   中英

具有捕獲組和后向引用的正則表達式在Java中如何匹配?

[英]How does this regular expression with capturing group and backreference match in Java?

我很難理解某個Java正則表達式將匹配什么:

"<(\\w+)></\\1>"

我已經閱讀了此http://docs.oracle.com/javase/tutorial/essential/regex/

但是我仍然無法弄清楚該表達式將要匹配的內容,尤其是\\1部分。 我可以看到<(\\w+)>是一個與任何單詞匹配的所有格量詞,但我不明白為什么要使用() (根據教程)來匹配一個組。

至於第二部分,我只是不知道\\1將匹配什么。 我嘗試過

"001123344556678899".replaceAll("\\1", ""); 

因為我以為也許它與一個數字匹配,但是它給了我我的字符串,因為它沒有被替換。

它旨在匹配成對的XML / HTML標簽,例如

<tag></tag>

\\\\1表示與第一個匹配組匹配,即括號中的東西。 (雙反斜杠是因為需要在Java字符串文字中對反斜杠進行轉義。)

我認為您可能誤解了本教程。 ()中的任何內容都是集合,因此(\\w{1})(\\w{1})意味着您有2個集合,每個集合中有1個字符。 \\1 ,參考第一組。 因此,在搜索和替換中更像是這樣:

"1234234234234".replaceAll("(23)", "\\1ab")

結果為"123ab423ab423ab..."\\1將返回您在第一組中匹配的內容。

只需刷新您對正則表達式反向引用(和捕獲組)的理解,例如here 捕獲組的使用()和反向引用將被引用的組捕獲的數據替換。

然后使用此站點來測試您的表情和數據,如下所示:

正則表達式: <(\\w+)></\\1>將成為Java字符串"<(\\\\w+)></\\\\1>" ,其輸入類似於<body></body>

Test    Target String   matches()   replaceFirst()  replaceAll()    group(0)    group(1)

1       <body></body>   Yes         Yes             Yes             <body></body> body

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM