我有一个正则表达式的问题,我无法弄清楚我所做的事情是否可行。我试图写一个正则表达式用以下代码替换一些字符串
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" 而且正则表达式不会替换任何东西。
答案 0 :(得分:1)
你错过了量词。就其本身而言,一个字符类恰好匹配输入字符串中的一个字符,因此您需要指定某种类型的量词,使其匹配多个字符。
尝试在角色类后添加+
(一个或多个)或*
(零个或多个):
Pattern pattern = Pattern.compile(" (address|country)='[^']*'");
答案 1 :(得分:1)
您需要[^']*
而不是[^']
。前者匹配任意数量的字符,后者恰好匹配一个非'
字符。