正则表达式 - 捕捉大括号

问题描述:

我有一段代码,试图用一个循环内递增指数反复匹配模式之间的增量数字:正则表达式 - 捕捉大括号

for(int count = 0; count < args.length; count++) { 
     message.replaceFirst("^\\{" + count + "\\d}$", args[count]); 
    } 

我希望能够做的是更换出现消息字符串中的{0},{1}等等与args中的值相同。但尽可能地尝试,我根本无法得到匹配的模式。我不是正则表达式专家,但是我在这里尝试了基于其他问题的各种正则表达式组合。我也尝试在StringUtils中使用替换方法无济于事。任何人都可以提供建议吗?

根本不要使用正则表达式。您事先知道您的搜索字符串并且它是常量(即,您可以从常量字符串加上变量count来构建它),因此不需要包含正则表达式。

+0

没错,所以我也尝试过'StringUtils.replace(message,“{”+ count +“}”,args [0]);'但那也行不通。 – Jeshurun

+0

之后你必须将它分配给你的变量,即'message = StringUtils.replace(...);'。 – Howard

+0

DANG字符串是不可改变的,可怕的是我忘记了。这个伎俩,非常感谢你! – Jeshurun

试试这个正则表达式:

String pattern = "^\\{\\d+\\}$"; 

说明:

  1. 从字符串的开头获得{
  2. 然后得到尽可能多的数字尽可能
  3. 直到}达到在字符串的末尾

例子:

String s = "{12}"; 
String pattern = "^\\{\\d+\\}$"; 
String s2 = s.replaceFirst(pattern, "9"); 

System.out.println(s2); 

输出:

9 

这应该是很容易应用到你的代码。

+0

当然'\\ d +'而不是'\\ d *'?我们(可能)不想匹配'{}'。 –

+0

是的,你说得对。更新了我的答案。 – Marcus

^$字符是锚。它们匹配字符串的开头和结尾。只有整个字符串是{\\d}时,该表达式才会匹配。我不认为他们需要在那里。

此外,字符串是在java中不可变的,正确的用法是message = message.replaceAll(blah);