Как сделать (буквально) "\ C" в качестве регресса? - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь использовать String.replaceAll(regex, repl) и сделать регулярное выражение литералом "\ C" (не escape-последовательностью), но "\\C" возвращает ошибку регулярного выражения, "\\\\C" создает "\\ C" и "\\\C" заставляет его попытаться создать escape-последовательность. Что мне делать?

Редактировать: вот ошибка, которую я получаю:

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1
\C
 ^
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.escape(Pattern.java:2177)
    at java.util.regex.Pattern.atom(Pattern.java:1952)
    at java.util.regex.Pattern.sequence(Pattern.java:1834)
    at java.util.regex.Pattern.expr(Pattern.java:1752)
    at java.util.regex.Pattern.compile(Pattern.java:1460)
    at java.util.regex.Pattern.<init>(Pattern.java:1133)
    at java.util.regex.Pattern.compile(Pattern.java:823)
    at <My Class>.<My Function>(<My Class>.java:<Line>)

ЭСТ.

РЕДАКТИРОВАТЬ: я обнаружил, что моя самая большая проблема заключается в случайном возврате исходной строки: P. У меня это работает сейчас:)

Ответы [ 3 ]

6 голосов
/ 22 марта 2011

\\\\C - это правильное регулярное выражение в Java, соответствующее строке \C.

"foo bar \C".replaceAll( "\\\\C", "cc" );
// -> "foo bar cc"

Это правила:

  • в Java вы должны бежать \ на \\
  • \C означает C escaped (не имеет значения, имеет ли C особый смысл и действительно нуждается в экранировании)
  • Так что, если вы хотите сопоставить строку "\C", обычное регулярное выражение равно \\C, но из-за первого правила оно получает \\\\C в Java.
4 голосов
/ 22 марта 2011

Используйте String.replace("\\C", repl), если вы не хотите регулярное выражение

0 голосов
/ 22 марта 2011

Странно, "\ C" работает в моем тестере регулярных выражений, который должен следовать синтаксису Java:

Pattern:
\\C

Text:
This is \C a test

Replace:
sad

Result:
This is sad a test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...