6

ユーザーの入力を正規表現で解析する Java プログラムを作成しています。たとえば、ユーザーが を入力した場合、/me eatsと一致し、/meに置き換え<move>ます。/ただし、Java は正規表現の特殊文字であるため、適切に一致しません。さまざまな特殊な Java 正規表現文字をすべて自動的にエスケープに置き換えるにはどうすればよいですか?

例えば:

  • /meになる\/me
  • *になる\*
  • [になる\[
  • 等々...

入れるPattern.compileです。

これはコマンド システムではありません。ロールプレイングの動きを示す方法をユーザーが指定できるようにしています。それが役立つ場合は、ユーザーがロールプレイの動きと見なすものを指定する方法のモックアップを次に示します。

このシステムを制御する設定ペインのモックアップ

4

3 に答える 3

18

Supuhstar、これがあなたが探しているワンライナーだと思います(オンラインデモを参照):

String sanitized = subject.replaceAll("[-.\\+*?\\[^\\]$(){}=!<>|:\\\\]", "\\\\$0");

これにより、次のすべての文字にバックスラッシュが追加されます。

. + * ? [ ^ ] $ ( ) { } = ! < > | : - \

テスト入力: String subject = ".+*?[^]$(){}=!<>|:-\\";

出力: \.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:-\\

次に、必要に応じて、次の手順に進むことができます。

Pattern regex = Pattern.compile(sanitized);

ノート:

  1. Perl や PHP と同様に、Java にも文字列全体をエスケープする構文があり\Qます\E。それはあなたのために何Pattern.quoteをするかですが、あなたの状況に必要以上のテキストを引用しています.

  2. これは、バックスラッシュを追加するという特定の要件を満たす唯一の解決策です。その他のオプションについては、 「Pattern.LITERAL の使用は Pattern.quote と同じ意味ですか?」も参照してください。

于 2014-05-20T00:35:09.607 に答える
0

これがうまくいくかどうかはわかりませんが、どうですか:

String inputString = ....
inputString = Pattern.compile(inputString, Pattern.LITERAL).pattern();
//process inputString now

現在テストされていません。実際に正しくない場合は、回答を削除します。

于 2014-05-17T04:38:24.520 に答える