2017-04-25 20 views
0

は私がJava正規表現を使用し始めていると私は、私はこの(不自然な例)のようなパターンを記述する必要が見つける:無効に文字列エスケープ(バックスラッシュ地獄)

C:\\\\windows\\\\system\\d+

が一致する

C:\windows\system32

正真正銘のバックスラッシュなしでjava正規表現を使用する方法はありますか?

+2

いいえ、 –

+2

はありませんあなたは(おそらくことを読んで、その後、別のファイルにそれらを救うことができますリソースとして)。 – yshavit

答えて

1

使用Pattern.quote(String s)(ドキュメントのためにクリックしてください)

それが渡された文字列リテラル文字としてのすべてのメタ文字を扱います(しかし、あなたはまだ文字列リテラルの構築にバックスラッシュをエスケープする必要があります)。これにより、\\\\の代わりに\\と入力すると、実際の/リテラル​​\を正規表現パターンで表すことができます。しかしこれは、他の特殊文字も文字通り同様に解釈されることを意味します(例では\d+など)。

しかし、あなたの例では、あなたが使用できます。これで Pattern.quote("C:\\windows\\system") + "\\d+";

テストを:System.out.println("C:\\windows\\system32".matches(Pattern.quote("C:\\windows\\system") + "\\d+"));

+0

\はまだ文字列のエスケープ文字であるため、\\が必要です。 (また、StackOverflowはコメントにエスケープ文字としてバックスラッシュを使用していますか?) – Powerlord

+0

@Powerlordおっと...そうですね! – sep1256

関連する問題