Есть ли способ избежать (или защитить) специальных символов в регулярном выражении?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
. Через некоторое время это становится очень раздражающим.
В. Как я могу автоматически избежать этих специальных символов?
я получаю: 'Исключение в нити«основной»java.util.regex.PatternSyntaxException: непредвиденная внутренняя ошибка вблизи индекса 1 'http://pastebin.com/aEWSibXv – OscarRyz
Моменты вроде этого, что я хочу, чтобы Java имел лучший синтаксис для строковых строк. – Hiro2k
@ Оскар: вам нужно уйти один раз для строкового литерала и в другое время, потому что 'replaceAll' является обычным выражением. Исправлено. –