1

特定のJava正規表現が何に一致するかを理解するのに苦労しています:

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

私はこれを読みましたhttp://docs.oracle.com/javase/tutorial/essential/regex/

\1しかし、その表現が何に一致するのか、特にその部分はまだわかりません。それは任意の単語に一致する所有量指定子であることがわかりますが、チュートリアルによるとグループを一致させるために which を<(\w+)>使用する理由がわかりません。()

\12番目の部分については、何が一致するかわかりません。で試してみました

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

おそらく数字と一致すると思ったので、何も置き換えられていないので、文字列が返されました。

4

3 に答える 3

8

次のような XML/HTML タグのペアに一致することを目的としています。

<tag></tag>

\\1平均は、最初に一致したグループ、つまり括弧内のものに一致します。(バックスラッシュが 2 つあるのは、バックスラッシュを Java 文字列リテラルでエスケープする必要があるためです。)

于 2012-04-19T15:19:47.533 に答える
1

チュートリアルを誤解している可能性があると思います。中身()はすべてセットなので(\w{1})(\w{1})、それぞれに 1 人のキャラクターがいる 2 つのセットがあることになります。、\1最初のセットを参照します。したがって、検索と置換では次のようになります。

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

結果は"123ab423ab423ab..."となり\1、最初のセットで一致したものが返されます。

于 2012-04-19T15:22:28.117 に答える
1

正規表現の後方参照 (およびキャプチャ グループ) の理解を更新してください (例:ここ) 。キャプチャ グループの使用()と後方参照は、参照されたグループによってキャプチャされたデータに置き換えられます。

次に、このサイトを使用して、式とデータを次のようにテストします。

正規表現: 次のような入力<(\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
于 2012-04-19T16:02:53.260 に答える