Как избежать определенных символов в Java - PullRequest
3 голосов
/ 14 октября 2011

Мне нужно экранировать символы, такие как ^, ., [, ], + и \ (вкладки и переводы строк не будут проблемой), в то время как другие, такие как * 1007, не будут * и ?.

EDIT = Более конкретно, у меня есть строка с этими символами, и мне нужно экранировать их, чтобы они не соответствовали регулярным выражениям. Мне нужно добавить \ к каждому из этих символов, но индивидуально для этого потребуется от 7 до 8 сканирований, и я хотел бы сделать это за один проход (т.е. все, что соответствует, добавляется \)

Как мне это сделать?

Спасибо.

Ответы [ 5 ]

6 голосов
/ 14 октября 2011

Будет ли это работать?

StringBuilder sb = new StringBuilder();
for (char c : myString.toCharArray())
{
    switch(c)
    {
        case '[':
        case ']':
        case '.':
        case '^':
        case '+':
        case '\\':
            sb.append('\\');
            // intended fall-through
        default:
            sb.append(c);
    }
}
String escaped = sb.toString();
1 голос
/ 14 октября 2011

Для этого есть приложение: Pattern.quote ()

Он избегает всего, что будет распознано как язык шаблонов регулярных выражений.

0 голосов
/ 19 октября 2011

\ Q и \ E и java.util.Pattern.quote() - это один и тот же подход.

Однако этот подход работает только для подмножеств регулярных выражений.

Проверьте следующую ссылку, и выВы увидите, что 4 из 15 вкусов поддерживают это.Так что лучше использовать подход Grodriguez, если вам нужно выполнить свое регулярное выражение в чем-то кроме Java, например, в javascript (который использует ECMA).

http://www.regular -expressions.info / refflavors.html

Вот одна строка, которая может работать.

"text to escape".replaceAll("([\\\\\\[\\]\\.\\^\\+])","\\\\$1");
0 голосов
/ 14 октября 2011

Чтобы избежать использования строки в качестве литерала в регулярном выражении, вы можете использовать Pattern.quote()

или просто окружить строку \\Q и \\E.

0 голосов
/ 14 октября 2011

Вы делаете это, добавляя \ к персонажу, которого хотите убежать.

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