正则表达式,用于匹配某些内容(如果它前面没有其他内容)

2022-08-31 05:27:32

使用Java中的正则表达式,我想编写一个正则表达式,当且仅当模式前面没有某些字符时,该正则表达式才会匹配。例如:

String s = "foobar barbar beachbar crowbar bar ";

我想匹配 if 前面没有 .因此,输出将是:barfoo

barbar
beachbar
crowbar
bar

答案 1

您希望像这样使用:negative lookbehind

\w*(?<!foo)bar

where 表示“仅当在此点之前没有”x“时”。(?<!x)

有关详细信息,请参阅正则表达式 - 查找

编辑:添加了捕获之前的字符(例如“海滩”)。\w*


答案 2

另一种选择是首先匹配可选的单词字符,后跟 ,当匹配时,检查直接向左的不是 。barfoobar

查看后退断言将在首先匹配后运行。bar

\w*bar(?<!foobar)
  • \w*匹配 0 个以上的单词字符
  • bar按字面意思匹配
  • (?<!foobar)消极的看,从当前位置断言不是直接向左。foobar

正则表达式演示