Java正则表达式挑战 - 仅在需要时添加前缀

时间:2015-09-16 05:18:51

标签: java regex

我正在尝试创建一个正则表达式,它会在单词(bar)中添加前缀(foo) 只有当它不存在并且有多个单词bar出现时。 同时忽略大写字母

字符串s =“叔叔吧,当他在酒吧时,他是一个骗子吧”

所以尝试以下方法:

String s = " uncle bar, is a foo bar kind of guy when he is at the bar ";    
Pattern p;
Matcher m; 
p = Pattern.compile("(?i) bar ");
m = p.matcher(s);
if(m.find()){
       s =  s.replaceAll("(?i) bar ", " foo bar ");
}

这将导致添加foo,即使它已经存在。 即“foo foo bar kind guy” 在尝试匹配时,我需要一个正则表达式来考虑我的模式的前缀。

提前致谢

2 个答案:

答案 0 :(得分:1)

使用负面的lookbehind断言。

s.replaceAll("(?i)(?<!\\bfoo )bar\\b", "foo bar");

DEMO

答案 1 :(得分:1)

你可以使用负面的lookbehind来做到这一点

s.replaceAll("(?i)(?<!foo )bar", "foo bar")