Java Regex查找/替换

时间:2016-02-26 21:55:20

标签: java regex

我有以下字符串

aaaa#include(soap1.xml)bbbb #include(soap2.xml)cccc #include(soap2.xml)

我希望找到所有#include([anyfilename]) [anyfilename]变化的地方。

我有与(?<=#include\()(.*?)(?=\)*\))匹配的正则表达式[anyfilename],但随后使用此替换执行替换#include()

有人可以建议我告诉我如何查找/替换整个#include([anyfilename])吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

#include\(([^)]*)\)

请参阅regex demo

我用消耗等值替换了lookarounds(这是零宽度断言,不消耗文本,不在匹配值中返回)。

正则表达式分解:

  • #include\( - 匹配一系列文字符号#include(
  • ([^)]*) - 第1组(我们将引用包含matcher.group(1)的组内的值)匹配除)以外的零个或多个字符
  • \) - 匹配文字)

可以使用相同的模式检索文件名,并从输入中删除整个#include()

IDEONE demo

String str = "aaaa#include(soap1.xml)bbbb#include(soap2.xml)cccc";
String p = "#include\\(([^)]*)\\)";
Pattern ptrn = Pattern.compile(p);
Matcher matcher = ptrn.matcher(str);
List<String> arr = new ArrayList<String>();
while (matcher.find()) {
    arr.add(matcher.group(1));       // Get the Group 1 value, file name
}
System.out.println(arr); // => [soap1.xml, soap2.xml]
System.out.println(str.replaceAll(p, "")); // => aaaabbbbcccc