首页 > 解决方案 > URL 子部分序列中不能只有数字

问题描述

我想更改正则表达式,以便如果类组在两个斜杠之间没有只有数字,则它匹配:

$regex = "~^upload/(?<class>[/a-z0-9_\.]+)/(?<id_table>\d+)$~";

preg_match($regex, "upload/.bes/.ur/13"); // returns true
preg_match($regex, "upload/.tables/fewf/.u23ser/15"); // returns true
preg_match($regex, "upload/.t/les2/.uer/11"); // returns true
preg_match($regex, "upload/1.tales/.user2/01"); // returns true

preg_match($regex, "upload/23/21"); // returns false
preg_match($regex, "upload/.tables/00/31"); // returns false
preg_match($regex, "upload/6/.uer/q/51"); // returns false

标签: phpregexpreg-matchdigits

解决方案


您可以使用所有格量词从 digit 类开始重写您的命名捕获:

(?<class>\d*+[a-z0-9_.]+(?>/\d*+[a-z0-9_.]+)*)

由于量词是所有格,因此您确定与之匹配的第一个字符[a-z0-9_.]+不是数字。


推荐阅读