使用正则表达式有一种优雅的方式吗?

时间:2014-08-07 15:38:46

标签: java regex parsing

我需要搜索并替换可能在字符串中出现一次或多次的类似变量的模式。我开始做以下工作正常:

String str1 = "Hello $$(var)";
String regex = "$$(var)";
str1.replaceAll(Pattern.quote(regex), " world");

这正确地产生"Hello world"

但我发现这些“变量”可能包含文字字符串,如下例所示:

String str2 = "Hello $$(var_AndUniverse)";

所以现在我需要一个解决方案,其中前一个结果是"Hello world_AndUniverse"

这是一个简单的案例。这些输入的字符串可能长达数千个字符,并且包含一个或多个变量,每个变量出现一次或多次。

我可以找出一种使用indexOf()方法的蛮力方法,并通过遍历整个字符串来创建一个新字符串,但我想知道是否有一种更简单的方法可以使用正则表达式和{{ 1}}方法或replaceAll() / Pattern解决方案。

2 个答案:

答案 0 :(得分:0)

要查找替换$$(any text)的所有序列,您可以使用

"Hello $$(var) $$(foo bar)".replaceAll("\$\$\([^)]+\)", "world");

将打印

Hello world world

这就是你要找的东西吗?

答案 1 :(得分:0)

以下内容将通过使用捕获组捕获 var 之后和结束括号之前的所有内容。

"Hello $$(var) $$(var bar)".replaceAll("\$\$\(var([^\)]*)\)", "world$1");

应该导致:

Hello world world bar

正则表达式的部分

  • \$\$\(var:字面值 $$(var
  • ([^\)]*):捕获群组捕获任何角色,但 0次或更多次。
  • \):文字

REY - Test Regex

相关问题