Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式,匹配两个不被第三个单词分隔的单词_Regex - Fatal编程技术网

Regex 正则表达式,匹配两个不被第三个单词分隔的单词

Regex 正则表达式,匹配两个不被第三个单词分隔的单词,regex,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 Languag

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

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 />
杜比数字音频2.0语言法语
杜比数字5.1 音频语言西班牙语杜比数字音频语言7.1 英语
字幕语言西班牙语
假阳性:

/Audio.*((?!\<br\ \>).).*Spanish/i
/Audio.*(?!\).*西班牙语/i

我做错了什么

如果我正确理解您的问题,您希望捕获一个或多个介于“音频”和“西班牙语”之间的单词,除非这些单词包含

有什么问题吗? 第一个
*
匹配

,然后负向前看匹配

西班牙语之间的空格

如何解决这个问题?
Audio\s*((?:(!))*?)\s*西班牙语
有点细分:

音频
\*
(#捕获组
(?:
(?!)。#任何不以字符串“
”开头的字符 )*?0次以上;懒惰 ) \* 西班牙的
你可以


以上是一篇经过编辑的文章;以前的迭代:

Audio\s*((?!\s*\).*?\s*西班牙语
感谢Christian指出,如果

前面有非空格字符,例如
音频foo
西班牙语
,则上述内容将匹配

Audio\s*((?!.\).*?\s*西班牙语

如果在“西班牙语”后面有一个尾随的

,这仍然是非常有缺陷和失败的。

使用DOM解析器逐个提取文本节点,然后搜索每个文本节点以获得所需内容。@CasimiretHippolyte,而我通常是第一个使用“不要使用正则表达式解析HTML”的人,这似乎是一个非常简单的用例,可能不需要解析器(假设OP只做了一次对信息的grepping,而不是将其合并到一个更大的、重复的查询中)。请保持简单-@0m3r您的链接没有帮助,因为它无法识别测试字符串并不代表可能遇到的所有字符串。请删除您的评论。谢谢您的提示。我正在尝试检查xml提要字段是否匹配。如果字段中的任何位置出现“音频”和“西班牙语”字样,并且没有换行符(“
”它们之间应该有一个正匹配。正则表达式是我唯一的选择。如果我的问题不够清楚,很抱歉。我实际上花了很多心思。你如何排除匹配,比如说,
Audio foo
bar西班牙语
?它适用于我的问题中所示的测试字符串。但是,由于某种原因,如果整个测试字符串只有一行:>杜比数字音频2.0语言法语
杜比数字5.1音频语言西班牙语
杜比数字音频语言7.1英语
字幕语言西班牙语
@dyna Yikes!我没有理由不检查那个案例,也没有理由不尝试三次,我想我只是休息一天。我知道我想得再仔细一点,并改变量词,使正则表达式准确地反映问题。@KernelPanic非常感谢。这确实很好。我希望你的晚餐很好。@KernelPanic:为什么要插入外部捕获组?如果没有它,你不会得到同样的结果吗?