正则表达式 - 捕捉大括号
我有一段代码,试图用一个循环内递增指数反复匹配模式之间的增量数字:正则表达式 - 捕捉大括号
for(int count = 0; count < args.length; count++) {
message.replaceFirst("^\\{" + count + "\\d}$", args[count]);
}
我希望能够做的是更换出现消息字符串中的{0},{1}等等与args中的值相同。但尽可能地尝试,我根本无法得到匹配的模式。我不是正则表达式专家,但是我在这里尝试了基于其他问题的各种正则表达式组合。我也尝试在StringUtils中使用替换方法无济于事。任何人都可以提供建议吗?
根本不要使用正则表达式。您事先知道您的搜索字符串并且它是常量(即,您可以从常量字符串加上变量count
来构建它),因此不需要包含正则表达式。
试试这个正则表达式:
String pattern = "^\\{\\d+\\}$";
说明:
- 从字符串的开头获得
{
- 然后得到尽可能多的数字尽可能
- 直到
}
达到在字符串的末尾
例子:
String s = "{12}";
String pattern = "^\\{\\d+\\}$";
String s2 = s.replaceFirst(pattern, "9");
System.out.println(s2);
输出:
9
这应该是很容易应用到你的代码。
当然'\\ d +'而不是'\\ d *'?我们(可能)不想匹配'{}'。 –
是的,你说得对。更新了我的答案。 – Marcus
^
和$
字符是锚。它们匹配字符串的开头和结尾。只有整个字符串是{\\d}
时,该表达式才会匹配。我不认为他们需要在那里。
此外,字符串是在java中不可变的,正确的用法是message = message.replaceAll(blah);
没错,所以我也尝试过'StringUtils.replace(message,“{”+ count +“}”,args [0]);'但那也行不通。 – Jeshurun
之后你必须将它分配给你的变量,即'message = StringUtils.replace(...);'。 – Howard
DANG字符串是不可改变的,可怕的是我忘记了。这个伎俩,非常感谢你! – Jeshurun