Java正则表达式使用精确令牌发出问题

时间:2011-08-18 16:00:09

标签: java regex string

在我的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%%%

我有谷歌搜索,Binged,维基百科等等。搜索“匹配regex on exact”(和他们的喜欢)会转回各种各样的东西,其中没有一个能帮助我使用带有标点符号(百分号)的令牌。

正则表达式只是让我每次都感受到的事情之一,这是我的最后一招。

感谢StackOverflowers可以指出我正确的方向!

2 个答案:

答案 0 :(得分:3)

java有一个函数来引用正则表达式java.util.regex.Pattern.quote(string)

中的字符串

它的作用是使用\Q\E围绕字符串(根据需要在字符串中将\E替换为\E\\E\Q

您的示例"\\Q%%%NAME%%%\\E"中的

将执行

答案 1 :(得分:2)

如果百分号是你唯一的问题,反斜杠用于转义正则表达式中的特殊字符。

所以你的模式应该是\%\%\%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

我在这里错过了什么吗?