请教正则匹配过长该如何解决?

$a='a/b/11111/';
$b='a/b/11111/c/d/e/f';
正在做一个路由的匹配发现写的正则能把a和b都能进行匹配,请教如何只匹配a不能匹配b?
(1111可能是数字也可能是字符串)
代码

preg_match_all('/a\/b\/([\w]+)/', $a, $match,PREG_SET_ORDER);

$c = 'a-111-222.html';
$d = 'a-111-222.html/123/123/123/12/3';

正则:
/a-([\w]+)-([\w]+).html/

也是能同时匹配$c和$d,预期是只能匹配$c不能匹配$d。

谢谢

阅读 1.7k
1 个回答

如果你的期望的匹配都是一个完整的字符串,那么可以用 ^$ 匹配首尾即可:
第一个:
/^a\/b\/(\w+)\/$/
第二个:
/^a-(\w+)-(\w+).html$/

PS: 你的 \w的外面的 [] 在你目前的场景下是多余的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏