【发布时间】:2018-09-06 17:49:17
【问题描述】:
我想对 url 执行正则表达式操作。我的网站上有这两条路线:
- domain.tld/clermont-ferrand/63000-cedex-01/
- domain.tld/clermont-ferrand/63000-cedex-01/in-a-25-km-radius/
我正在使用正则表达式 [0-9a-z\-]+ 来匹配 63000-cedex-01(请注意,63000-cedex-01 可以是用连字符而不是空格格式化的任何邮政编码)。
现在当有人尝试访问这样的 url 时,问题就出现了:
domain.tld/clermont-ferrand/in-a-25-km-radius/
正则表达式会认为这条路线是有效的,这是我不想要的。
是否可以告诉正则表达式搜索不包含“in-a-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 框架的路由文件中,我有这两条路由:
/event/{status:(ongoing|past|upcoming)}/{category_slug:[az-]+}-event/in/{city_slug:[az-]+}/{postal_code_slug:[0-9a- z-]+}/
匹配如下路径:
/event/ongoing/music-event/in/clermont-ferrand/63000-cedex-01/
和
/event/{status:(ongoing|past|upcoming)}/{category_slug:[az-]+}-event/in/{city_slug:[az-]+}/{postal_code_slug:[0-9a- z-]+}/in-a-{radius:\d+}-{unit:(km|mile|miles)}-radius/
匹配如下路径:
/event/upcoming/film-event/in/beverly-hills/90210/in-a-40-miles-radius/
不幸的是,第一条路线也匹配:
/event/past/manga-and-anime-event/in/montreal/in-a-200-km-radius/
编辑
正则表达式应该匹配如下字符串:
9600
ax-85000
ad327
36505-962
biqq-1zz
gx11-1aa
和 not 匹配如下字符串:
在 200 公里半径内
1 英里半径内
半径 85 英里
【问题讨论】:
-
如何将
63000-cedex-01与[a-z\-]+匹配?是不可能的。你真正的正则表达式是什么?显示使用它的代码,并解释每个提供的输入需要得到什么结果。 -
你是对的。我修好了!
-
你什么都没解决。
-
你知道你的最大半径是多少。而且您知道邮政编码的可能长度。你为什么用+?