在我的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可以指出我正确的方向!
答案 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
我在这里错过了什么吗?