查找包含X但不包含Y

时间:2018-03-28 06:44:55

标签: php regex pcre

我想在网址上执行正则表达式操作。我的网站上有这两条路线:

  • 使用domain.tld /克莱蒙费朗/ 63000-CEDEX-01 /
  • 使用domain.tld /克莱蒙费朗/ 63000-CEDEX-01 / IN-A-25公里的半径/

我使用正则表达式[0-9a-z\-]+来匹配63000-cedex-01(注意63000-cedex-01可以是用连字符而不是空格格式化的任何邮政编码)。

现在当有人试图访问这样的网址时出现问题:

使用domain.tld /克莱蒙费朗/ IN-A-25公里的半径/

正则表达式会将此路线视为有效,这是我不想要的。

是否有可能告诉正则表达式搜索一个连字符分隔的字母数字模式,该模式不包含"在-25-km-radius"。

我尝试了这两个正则表达式并且他们不能工作:

  • ((?!in-a-\d+-(km|mile|miles)-radius)|[0-9a-z\-]+)
  • (?(?=[0-9a-z\-]+)([0-9a-z\-]+)|(in-a-\d+-(km|mile|miles)-radius))

修改

基本上在我的MVC框架的路由文件上我有这两条路线:

  

/事件/ {状态:(正在进行|过去|即将到来)} / {category_slug:[AZ - ] +} - 事件/中/ {city_slug:[AZ - ] +} / {postal_code_slug:[0-9a- ž - ] +} /

匹配路径,如:

  

/事件/正在进行/音乐事件/中/克莱蒙费朗/ 63000-CEDEX-01 /

  

/事件/ {状态:(正在进行|过去|即将到来)} / {category_slug:[AZ - ] +} - 事件/中/ {city_slug:[AZ - ] +} / {postal_code_slug:[0-9a- ž - ] +} /在-α-{半径:\ d +} - {单位:(千米|英里|英里)} - 半径/

匹配路径,如:

  

/事件/即将到来/膜事件/中/贝弗利丘/ 90210 / IN-A-40英里半径/

不幸的是,第一条路线也匹配:

  

/事件/过去/漫画和 - 动画事件/中/蒙特利尔/ IN-A-200公里的半径/

修改

正则表达式应匹配如下字符串:

  • 9600

  • AX-85000

  • ad327

  • 36505-962

  • biqq-1ZZ

  • gx11-1aa

匹配这些字符串:

  • 在-A-200公里的半径

  • 在-A-1英里半径

  • 在-A-85英里半径

1 个答案:

答案 0 :(得分:0)

  

是否可以告诉正则表达式搜索分隔符号   不包含“半径25公里”的字母数字图案。

试试这个:

\A(?!in-a-25-km-radius)[\w-]++