匹配 2 个单词的正则表达式,不由第 3 个单词分隔



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

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

我在这里做错了什么?

如果我

正确理解了您的问题,您希望在"音频"和"西班牙语"之间捕获一个或多个单词,除非这些单词包含<br />

怎么了?

.*匹配<br />,然后负前瞻匹配<br />Spanish之间的空间。

该怎么解决?

Audios*((?:(?!<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

你可以看到它在行动。

<小时 />

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

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

感谢克里斯蒂安指出,如果<br />前面有非空格字符,例如 Audio foo <br /> Spanish .

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

这仍然有很大的缺陷,如果在"西班牙语"之后有一个尾随<br />,就会失败。

最新更新