正则表达式匹配2个条件

时间:2018-10-08 18:29:35

标签: regex

当前,我在此WordPress插件上使用了这2个正则表达式,称为重定向,以过滤掉某些URL,使其不被记录。

(食物),以匹配网址中任何包含食物词的内容。

((。js)|(.css))$ 以匹配URL末尾的任何.js或.css

如何将这2个正则表达式与AND合并为1,这样我可以在下面得到预期的输出?

期望的输出:

https://example.com/food/test/apple.css - match
https://example.com/food/fruit/pineapple.css - match
https://example.com/food/fruit/apple.php - NOT match
https://example.com/food/new/strawberry.js - match

我已经尝试了几个小时,但仍然无法正常工作。我对Regex不好。如何使其与(food)AND((.js)|(.css))$

一起使用

我在下面尝试了此组合,但失败了。请帮我。预先感谢。

(food)&((.js)|(.css))$ 
(food)+((.js)|(.css))$ 
(food)/((.js)|(.css))$ 

2 个答案:

答案 0 :(得分:1)

您可以使用

'~.*food.*\.(?:js|css)$~'

请参见Map interface

如果/food/必须存在,请使用

'~.*/food/.*\.(?:js|css)$~'

如果您只是在测试匹配项,请删除第一个.*

详细信息

  • .*-最多0个字符,
  • food-文字子字符串
  • .*-最多0个字符,
  • \.(?:js|css)-.后跟jscss
  • $-字符串结尾

答案 1 :(得分:0)

要在网址中的任意位置匹配食物一词,并确保.css或.js位于末尾,则可以使用exists将它们加入:

^https?://.*food.*\.(?:css|js)$

使用alternation将是:

'~^https?://.*food.*\.(?:css|js)$~'

说明

  • ^断言字符串的开头
  • https?://将http与可选的s匹配,然后://
  • .*food.*匹配任意字符零次或多次,然后匹配食物,然后匹配零次或更多次的任意字符
  • \.(?:css|js)$匹配一个点,然后匹配一个与css或js匹配的非捕获组,并断言字符串的结尾

delimiters