我试图创建一个匹配两个单词(按顺序)的正则表达式,但不能在它们之间有另一个单词/字符。
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
我在这里做错了什么?
答案 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 />
落后,这仍然是非常有缺陷的,并且失败了。