如果字符串的第一个实例后跟字符串,则正则表达式匹配 - 强制惰性

Regex match if first instance of string is followed by string -- force lazy

我正在尝试 return 仅当字符串的第一个实例后跟另一个字符串时才进行匹配。但是他们可能稍后会出现,但我不想匹配。

Thing #1
.........
hidden=true
.........
Thing #2
.........
hidden=false
.........

现在我正在使用 Thing #1[\S\s]*?hidden=false,但很明显,当我不想要它时,它会 return 匹配上面的示例。仅当第一个 hidden= 后跟 false 时。我知道如何使用捕获组来完成,但这对我来说会让事情变得非常复杂,我在 Android 上使用 Tasker,捕获组是一个巨大的考验,而且速度很慢。我该怎么做?

你很接近。您只需要防止另一个 Thing #1 出现在匹配的事物和下一个标记之间。

使用负面展望:

Thing #1((?!Thing #1)[\S\s])*?hidden=false

这个否定正则表达式将在文本中搜索第一个 Thing #<number> 实例,如果它后跟 hidden=false:

^.*?Thing #\d+(?:(?!hidden=(?:true|false))[\S\s])*?hidden=false

如果先找到 hidden=true,则不会有任何匹配项。

RegEx Demo