我需要在java中查找和替换子字符串,例如以'%'开头的变量名,使用正则表达式:
[\s,(](%variable)[\s,)$]
我想查找所有变量,存储它们的名称,然后将它们替换为某个占位符,例如%%。在java中找不到怎么可能,请帮忙。 Matcher#replaceAll替换整个正则表达式,但我需要替换第一组,而不是整个事件 这是我用于搜索的代码示例:
Matcher m=Pattern.compile(regex).matcher(str);
while(m.find())
{
System.println(m.group(1));
}
UPD: 解决方案是将捕获设置为整个正则表达式:
([\s,(])(%variable)([\s,)$])
并使用replaceAll(“$ 1”+替换+“$ 3”)然后
答案 0 :(得分:4)
您可以保留一些正则表达式组,并替换字符串中出现的其他组。如果我们假设你的正则表达式是:[\\s,\\(](%variable)[\\s,$]
,那么你可以使用java.lang.String
的{{3}}方法。
首先需要以saparate组的形式设置正则表达式
例如:([\\s,\\(])(%variable)([\\s,$])
,
所以你有
第一组是:[\\s,\\(]
第二组是%variable
第三组是[\\s,$]
,现在你可以设置你的小组的参考了
将替换正则表达式中发现的每个出现的最终值,例如,如果我们要用字符串'myNewVal'替换第二个组,则代码将为:
String myRegex = "([\\s,\\(])(%variable)([\\s,$])";
String replacedValue = originalValue.replaceAll(myRegex,"$1myNewVal$3");
$1
和$3
引用第一组和第三组,我们将它们保存在replaceValue中。
如果你想删除第二组,你可以试试这个:
String myRegex = "([\\s,\\(])(%variable)([\\s,$])";
String replacedValue = originalValue.replaceAll(myRegex,"$1$3");