// 使いたい文字の定義
String testdata = "!#$%&()*+,-./:;<=>?@[\]^_`{|}~";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < testdata.length(); i++) {
String ch = testdata.substring(i, i + 1);
try {
testdata.matches(ch);
} catch(PatternSyntaxException e) {
if ("\".equals(ch)) {
sb.append("\");
}
sb.append("\");
}
sb.append(ch);
}
System.out.println("エスケープ正規表現:" + sb.toString().replaceAll("\\", "\\\\"));
System.out.println("チェック結果:" + testdata.matches("^[" + sb.toString() + "]+$"));
これらの特殊文字は許可したいっていう時に許可文字が多いと
正規表現でチェックかけたいところですが、
特殊文字ばかりだとどれをエスケープすればいいのか分かりません。
という時にこんな感じで実験するとJavaに記述すべき正規表現が
算出されます。
今回の例の結果だと
!#$%&\(\)\*\+,-./:;<=>\?@\[\\\]^_`\{|}~
がJavaに記述すべき(matchesの引数に渡すべき)正規表現の文字列になります。
Java表現上のエスケープ+正規表現としてのエスケープがあるので
基本的に""は2つで1セットです。
かおす。
PR