正则表达式匹配2个单词未被第3个单词分隔

时间:2017-03-20 23:46:34

标签: regex

我试图创建一个匹配两个单词(按顺序)的正则表达式,但不能在它们之间有另一个单词/字符。

I need a match when "Spanish" & "Audio" are not separated by "<br />"

测试字符串:

Dolby Digital Audio 2.0 Language French<br /> Dolby Digital 5.1 
Audio Language Spanish<br /> Dolby Digital Audio Language 7.1 
English<br /> Subtitles Language Spanish <br />

误报:

/Audio.*((?!\<br\ \>).).*Spanish/i

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您希望在&#34;音频&#34;之间捕获一个或多个字词。和&#34;西班牙语&#34;,除非这些单词包含<br />

问题是什么?

第一个.*匹配<br />,然后否定前瞻符合<br />Spanish之间的空格。

如何解决?

Audio\s*((?:(?!<br\ \/>).)*?)\s*Spanish

分解:

Audio
\s*
(                    # the capture group
  (?:
    (?!<br\ \/>).    # any character such that it doesn't begin the string "<br />"
  )*?                # 0+ times; lazy
)
\s*
Spanish

你可以see it in action

以上是编辑后的帖子;以前的迭代:

Audio\s*((?!\s*\<br\ \/>).*?)\s*Spanish

感谢Christian指出,如果<br />前面有非空格字符,则上述情况会匹配,例如: Audio foo <br /> Spanish

Audio\s*((?!.*\<br\ \/>).*?)\s*Spanish

如果在&#34;西班牙语&#34;之后有<br />落后,这仍然是非常有缺陷的,并且失败了。