0

仅当字符串的第一个实例后跟另一个字符串时,我才尝试返回匹配项。但是它们可能会在以后出现,但那时我不想要匹配。

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

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

4

2 回答 2

0

你很近。你只需要防止另一个Thing #1在匹配的东西和下一个标记之间。

使用负面的展望:

Thing #1((?!Thing #1)[\S\s])*?hidden=false
于 2016-10-02T05:19:15.377 回答
0

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

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

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

正则表达式演示

于 2016-10-02T05:44:56.200 回答