正则表达式,用于匹配前面没有其他内容的内容

2024-09-28 20:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

String s = "foobar barbar beachbar crowbar bar ";

如果bar前面没有foo,我想匹配。因此,产出将是:

barbar
beachbar
crowbar
bar

Tags: stringfoo模式barjava字符crowbarfoobar
2条回答

您希望像这样使用negative lookbehind

\w*(?<!foo)bar

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

有关更多信息,请参见Regular Expressions - Lookaround

编辑:添加\w*以捕获前面的字符(例如“beach”)

另一个选项是首先匹配可选的单词字符,后跟bar,当匹配后,检查直接在左边的不是foobar

lookbehind断言将在首先匹配bar之后运行

\w*bar(?<!foobar)
  • \w*匹配0+个单词字符
  • bar逐字匹配
  • (?<!foobar)负向后看,从当前位置断言foobar不直接向左

Regex demo

相关问题 更多 >