我被正则表达式问题困扰了。我一直在使用它们进行一个项目并且它们一直在完美地工作,但后来我遇到了一个我认为可以用积极的前瞻解决的情况,但我的尝试并没有像我预期的那样产生。
为了说明我在下面写了一行。其中,我希望返回两个匹配,第一个包含“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”之后出现的“This”或“That”。然后得到“)”之前的第一个单词。但是,我真的不明白我如何指定(向前看,直到你找到一个“)”,然后回溯直到你得到它背后的字。这样的事情有可能吗?
答案 0 :(得分:3)
您可以使用non-greedy quantifier:
K\.(This|That).*?(\w*)\)
或:(如果您不希望近似括号成为匹配的一部分)
K\.(This|That).*?(\w*)(?=\))
这样它会匹配This | That和单词之间的任何内容,但它会懒得(所以一旦找到\w*
的良好匹配就会使用它,如果没有{{ {1}}以下)
答案 1 :(得分:2)
如何:K\.(This|That)\(.*?(\w+)\)
这非贪婪地匹配括号之间的部分,但只要在右括号之前只剩下单词字符就停止。