正则表达式匹配一组行,但不包含某个字符串

3

我似乎无法编写一个正则表达式来匹配由两个特定字符串分隔的一组行,除非在这个组内出现第三个字符串。

示例。 给定此代码块:

func foo() {
   print("foo")
   dontmatchme
}

func foo2() {
   print("foo2")
}

func foo3() {
   print("foo")
   dontmatchme
}

我希望只匹配 foo2,因为函数体内不包含字符串 dontmatchme

我正在使用 func foo.*(\n|.)*?(}) 匹配函数,但我似乎无法正确使用回顾后发断言来避免匹配包含 dontmatchme 的函数。

谢谢!


你可以使用 func foo(?:(?!dontmatchme)[\w\W])*?(}),参见 https://regex101.com/r/jjbrQz/1 - Wiktor Stribiżew
1个回答

2
您可以使用负向先行断言来实现这一点:
func foo(?![^}]*dontmatchme)[^}]*}

正则表达式演示

正则表达式详情:

  • func foo: 匹配func foo文本
  • (?![^}]*dontmatchme): 负向先行断言,如果在匹配到}之前的位置有dontmatchme,则匹配失败
  • [^}]*: 匹配除}以外的任意字符0次或多次
  • }: 匹配一个}

你可以删除 foo - 只需从 func} - mcky
当然,但我认为 OP 只想匹配名为 foo 的函数。 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接