用于/ prefix / action(/ id)的PHP正则表达式

时间:2011-01-22 15:04:53

标签: php regex

我正在尝试构建一个匹配两个字符串的正则表达式:

/prefix/action

/prefix/action/43

但不是

/prefix/action/

/prefix/action43

其中43可以是[0-9] +之类的任何东西,只有前面有斜杠

我还想将数字(不是斜线)(如果有的话)作为命名组捕获。

~/prefix/action/?(?P<itemID>[0-9]+)?~

这个表达式匹配,除了数字必须以斜杠开头的条件之外,我在添加前瞻或后瞻断言的所有尝试都失败了。

我确实理解通过额外的外部处理可以解决任务问题,但我只是在寻找正则表达式解决方案。谢谢你的理解。

非常感谢您的建议。

解决方案:

~/prefix/action(?:/(?P<itemID>[0-9]+))?~

1 个答案:

答案 0 :(得分:2)

如何同时选择/和以下号码?

^/prefix/action(?:/[0-9]+)?$

要捕获命名组中的可选数字,请在数字正则表达式周围添加(?P<itemID>...)

^/prefix/action(?:/(?P<itemID>[0-9]+))?$

另请注意,我添加了 正则表达式中缺少的开始和结束锚点。没有它们,如果输入的子字符串与正则表达式匹配,则会得到匹配。