将字符串匹配到x但不是y

时间:2015-09-13 20:24:36

标签: php regex

我有一个字符串,其中我试图捕获所有内容,直到第一个“〜”,后面的“=”。

input.error[data-groups~=5]~label.light[data-groups~=5]
│                          │
└  Desired capture region  ┘ 

如果我理解正确,为此我应该使用负向前看

到目前为止,这是我的尝试:

(^[^~]+(?!=))

这个想法是[^~]+将消耗所有内容,直到遇到“〜”,前提是它没有使用指令(?!=)

继承“=”

但是这个表达式只捕获到第一个“〜”

的所有内容

抱歉如果这看起来很糟糕,正则表达式并不是我的强项。

2 个答案:

答案 0 :(得分:2)

你几乎就在那里:你忘了真正匹配~

(^[^~]*~(?!=))

不,不完全:这会找到一个〜后面没有=,但一定不能有任何波浪线。所以它仍然会失败。你可以扩展你的正则表达式,但在我看来,通过使用"非贪婪的"来匹配到第一个符合条件~之前会更简单。通配符:

(^.*?~(?!=))

这将在第一场比赛时停止,但在此之前将匹配任何内容。

答案 1 :(得分:2)

尝试使用.*?~代替[^~]+

^(.*?~)(?!=)