Почему этот шаблон не скомпилирован:
Pattern.compile("(?x)[ ]\\b");
ошибка
ERROR java.util.regex.PatternSyntaxException:
Illegal/unsupported escape sequence near index 8
(?x)[ ]\b
^
at java_util_regex_Pattern$compile.call (Unknown Source)
В то время как работают следующие эквивалентные?
Pattern.compile("(?x)\\ \\b");
Pattern.compile("[ ]\\b");
Pattern.compile(" \\b");
Это ошибка в компиляторе Java regex, или я чего-то не хватает? Мне нравится использовать [ ]
в расширенном регулярном выражении вместо обратного слэша-обратного слэша, потому что он сохраняет некоторый визуальный шум. Но, видимо, они не то же самое!
PS: этот вопрос не касается обратных косых черт. Это об экранировании пробелов в многословном регулярном выражении с использованием символьного класса, содержащего единственное пространство [ ]
вместо использования обратного слэша.
Так или иначе комбинация verbose regex (?x)
и класса символов, содержащего одно пространство [ ]
выдает компилятор и не распознает escape-последовательность слова \b
Протестировано с Java до 1.8.0_151