Java регулярное выражение проблемы с точным токеном - PullRequest
0 голосов
/ 18 августа 2011

В моем Java-приложении у меня есть "строка шаблона", скажем, " Имя этой записи: %%% NAME %%%. "

Я хочу просмотреть циклсписок и для каждой итерации распечатайте «настроенную версию» этого шаблона, которая заменяет строку %%%NAME%%% токеном для значащего значения.Например:

List<String> strNamesList = getNamesSomehow();
String strTemplate = "This record's name is : %%%NAME%%%.";
String strCustomized = "";
for(int i = 0; i < strNamesList.size(); i++)
{
    strCustomized = strTemplate.replaceFirst(strSomeRegex, strNamesList.get(i));
    System.out.println(strCustomized);
}

Как обычно, я задыхаюсь от strSomeRegex.Мне просто нужно регулярное выражение, которое будет соответствовать точной фразе:

%%%NAME%%%

У меня есть Google, Binged, Wikipediaed и другие.Поиски «сопоставить регулярное выражение с точным» (и им подобные) возвращают все виды вещей, ни одна из которых не помогает мне с этим токеном, в котором есть знаки препинания (процентные знаки).

Регулярные выражения - только один из такихвещи, которые меня каждый раз получают, и это мое последнее средство.

Спасибо всем добрым StackOverflowers, которые могут указать мне правильное направление!

Ответы [ 2 ]

3 голосов
/ 18 августа 2011

java имеет функцию для кавычки строки в регулярном выражении\E\\E\Q в строке по мере необходимости)

в вашем примере "\\Q%%%NAME%%%\\E" сделает

2 голосов
/ 18 августа 2011

Если знаки процента являются вашей единственной проблемой, обратная косая черта используется для экранирования специальных символов в регулярном выражении.

Таким образом, ваш шаблон должен быть \%\%\%NAME\%\%\%

Что означает в Java, можно написать:

String patternString = "\\%\\%\\%NAME\\%\\%\\%";

РЕДАКТИРОВАТЬ: Подождите, но является ли % специальным символом регулярного выражения?Я предполагал, что это так, но следующий код работал для меня:

Pattern p = Pattern.compile("%%%NAME%%%");
Matcher m = p.matcher("This record's name is : %%%NAME%%%.");
System.out.println(m.replaceFirst("Bob")); //prints "This record's name is : Bob."

Я не вижу %, упомянутого где-либо в документации: http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

Я что-то здесь упускаю

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