14
正規表現で特殊文字をエスケープ(または保護)する方法はありますか?regex:バックスラッシュと特殊文字をエスケープするには?
私は何をしたいのは、単純な正規表現テスターを作成することです:
import java.util.regex.*;
class TestRegex {
public static void main(String ... args) {
System.out.printf("%s ~= %s ? %s %n" , args[0], args[1], Pattern.matches(args[0], args[1]));
}
}
プログラムにプラグインで彼らの前に私のパターンをテストするために素晴らしい作品:
$java TestRegex "\d" 1
\d ~= 1 ? true
$java TestRegex "\d" 12
\d ~= 12 ? false
$java TestRegex "\d+" 12
\d+ ~= 12 ? true
$java TestRegex "\d+" a12
\d+ ~= a12 ? false
$java TestRegex "\d+" ""
\d+ ~= ? false
次私のプログラムでこのパターンを使用することですが、手動でエスケープする必要があるたびに手動でエスケープする必要があります:
Pattern p = Pattern.compile(/*copy pasted regex here */);
このサンプルでは、\d
を\\d
に置き換えます。しばらくすると、これは非常に刺激的になります。
Q.これらの特殊文字は自動的にどのようにエスケープできますか?
私が手: '例外スレッドの「メイン」java.util.regex.PatternSyntaxException:インデックス1に近い予期しない内部エラー'http://pastebin.com/aEWSibXv – OscarRyz
これは、Javaがリテラル文字列のより良い構文を持っていればいいと思います。 – Hiro2k
@Oscar:あなたは 'replaceAll'自体が正規表現であるため、文字列リテラルともう1回はエスケープする必要があります。今修正されました。 –