繁体   English   中英

Java正则表达式具有确切令牌的问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM