正则表达式多次替换为捕获组和否定字符类

时间:2014-06-06 21:12:57

标签: regex regex-negation

我有一个正则表达式的问题,我无法弄清楚我所做的事情是否可行。我试图写一个正则表达式用以下代码替换一些字符串

String string = "address='21 Street' and country='United Kingdom'";
Pattern pattern = Pattern.compile(" (address|country)='[^']'");
String replacedString = pattern.matcher(string).replaceAll(" $1='call us'");

System.out.println(replacedString);

我期待的是打印字符串

address='call us' and country='call us'

我不打算用正则表达式来实现这一点,因为还有其他更好的方法,但我只是想知道为什么这不起作用:'(。

让我感到困惑的是,被否定的角色类[^']不是" work" 而且正则表达式不会替换任何东西。

2 个答案:

答案 0 :(得分:1)

你错过了量词。就其本身而言,一个字符类恰好匹配输入字符串中的一个字符,因此您需要指定某种类型的量词,使其匹配多个字符。

尝试在角色类后添加+(一个或多个)或*(零个或多个):

Pattern pattern = Pattern.compile(" (address|country)='[^']*'");

答案 1 :(得分:1)

您需要[^']*而不是[^']。前者匹配任意数量的字符,后者恰好匹配一个非'字符。