2

正規表現を使用してから数年が経ちましたが、私の記憶が正しければ、次のように動作するはずです。

String test = "axaxa";
Pattern p = Pattern.compile("([a-c])x\1x\1");
Matcher m = p.matcher(test);

m は実行時に何も一致しません。これは、コードで行っていることの非常に単純化されたバージョンです。その例は、実際には正規表現に関する Java チュートリアルから取られています! 私は自分のhtmlマッチングコードを以前から書き直そうとしましたが、それがうまくいかなかったので、何か間違ったことをしたと思って調査に行きました...インターネットによると、そうではありませんでした。そう。なぜこれが機能しないのか、誰にも手がかりがありますか?

追加情報、test.matches(the_pattern)返品false。グループのバックトラックが台無しになっているようです。

4

2 に答える 2

3

\\1のペースで使ってみてください\1

\Java 文字列のエスケープ文字です。\1を正規表現エンジンに送信するには、 \asをエスケープする必要があり\\1ます。

于 2010-12-20T08:37:33.803 に答える
1

Java では、バックスラッシュをエスケープする必要があります。

Pattern p = Pattern.compile("([a-c])x\\1x\\1");
于 2010-12-20T08:39:11.303 に答える