我有以下字符串
aaaa#include(soap1.xml)bbbb #include(soap2.xml)cccc #include(soap2.xml)
我希望找到所有#include([anyfilename])
[anyfilename]
变化的地方。
我有与(?<=#include\()(.*?)(?=\)*\))
匹配的正则表达式[anyfilename]
,但随后使用此替换执行替换#include()
有人可以建议我告诉我如何查找/替换整个#include([anyfilename])
吗?
答案 0 :(得分:1)
您可以使用以下正则表达式:
#include\(([^)]*)\)
请参阅regex demo
我用消耗等值替换了lookarounds(这是零宽度断言,不消耗文本,不在匹配值中返回)。
正则表达式分解:
#include\(
- 匹配一系列文字符号#include(
([^)]*)
- 第1组(我们将引用包含matcher.group(1)
的组内的值)匹配除)
以外的零个或多个字符\)
- 匹配文字)
可以使用相同的模式检索文件名,并从输入中删除整个#include()
。
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