[英]Java regex issues with an exact token
在我的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!
Java具有在正则表达式java.util.regex.Pattern.quote(string)
引用字符串的函数java.util.regex.Pattern.quote(string)
这是用\\Q
和\\E
包围字符串(根据需要在字符串中用\\E\\\\E\\Q
替换\\E
)
在您的示例中, "\\\\Q%%%NAME%%%\\\\E"
将
如果百分号是您唯一的问题,则使用反斜杠转义正则表达式中的特殊字符。
因此您的模式应为\\%\\%\\%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
我在这里想念什么吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.