在特定情况下跳过比赛

时间:2019-10-25 10:40:07

标签: php regex

需要使用正则表达式模式来匹配指定单词的所有实例,而不必只匹配单个单词,也不需要匹配单词内容。

例如搜索mediamediator中的实例匹配。

几乎没有例外。如果单词内容在url或字体系列声明中,则匹配应跳过。这是我到目前为止提出的代码,但是我漏了一些东西,因为它跳过了所有代码。

(?:font-family:|https?:\/\/)[^\s\'";}]*(*SKIP)(*FAIL)(media)

以上可以为tested at Regex101

1 个答案:

答案 0 :(得分:0)

您可以在(*SKIP)(*FAIL)之后添加一个管道,并在font-family:之后添加一个空格

请注意,您不必在字符类中转义\',并且如果将分隔符更改为/以外的其他内容,则也不必转义那些分隔符。您还可以省略媒体周围的捕获组。

(?:font-family:\h*|https?:\/\/)[^\s'";}]*(*SKIP)(*FAIL)|\bmedia\b
  • (?:非捕获组
    • font-family:\h*匹配font:family:和0+个水平空格字符
    • |
    • https?:\/\/匹配http和可选s
  • )关闭非捕获组
  • [^\s'";}]*匹配除'";或空白字符之外的任何其他字符0+次
  • (*SKIP)(*FAIL)消耗并避免使用SKIP and FAIL
  • |
  • \bmedia\b在单词边界之间匹配媒体

Regex demo