被正则表达式难倒(积极的前瞻性问题?

本文关键字:前瞻性 问题 正则表达式 | 更新日期: 2023-09-27 18:37:00

我被正则表达式问题难住了。 我一直在将它们用于一个项目,它们一直工作得很好,但后来我遇到了一个我认为可以通过积极的展望来解决的情况,但我的尝试并没有像我预期的那样结果。

为了说明,我在下面画了一行。 其中,我想返回两个匹配项,第一个包含"This"和"thisThing",另一个包含"That"和"thatThing",其中第一个值只能是"This"或"That",第二个值可以是任何(''w*)模式。

adsf(49) asd k:38* K.This(jfkael dk&$% thisThing) and K.That($$$$ djaf aj_dfj^^ ^ thatThing);

我以为这将是这样的:

K'.(This|That)  (????????????????)    ('w*)(?='))

意思是,找到出现在"K."之后的"这个"或"那个",然后得到前面的第一个单词")"。 但是,我真的不明白我该如何指定(向前看,直到找到")",然后回溯,直到你得到它背后的单词。 这样的事情可能吗?

被正则表达式难倒(积极的前瞻性问题?

您可以使用非贪婪量词:

K'.(This|That).*?('w*)')

或者:(如果您不希望右括号成为匹配的一部分)

K'.(This|That).*?('w*)(?='))

这样,它将匹配 This|那个和这个词,但它懒惰地这样做(所以一旦它找到一个很好的匹配'w*它就会使用它,如果没有)追随者,它会回溯)

怎么样:K'.(This|That)'(.*?('w+)')

这非贪婪地匹配括号之间的部分,但一旦右括号前只剩下单词字符,就会停止。