我正在尝试构建一个匹配两个字符串的正则表达式:
/prefix/action
和
/prefix/action/43
但不是
/prefix/action/
或
/prefix/action43
其中43可以是[0-9] +之类的任何东西,只有前面有斜杠
我还想将数字(不是斜线)(如果有的话)作为命名组捕获。
~/prefix/action/?(?P<itemID>[0-9]+)?~
这个表达式匹配,除了数字必须以斜杠开头的条件之外,我在添加前瞻或后瞻断言的所有尝试都失败了。
我确实理解通过额外的外部处理可以解决任务问题,但我只是在寻找正则表达式解决方案。谢谢你的理解。
非常感谢您的建议。
解决方案:
~/prefix/action(?:/(?P<itemID>[0-9]+))?~
答案 0 :(得分:2)
如何同时选择/
和以下号码?
^/prefix/action(?:/[0-9]+)?$
要捕获命名组中的可选数字,请在数字正则表达式周围添加(?P<itemID>...)
:
^/prefix/action(?:/(?P<itemID>[0-9]+))?$
另请注意,我添加了 正则表达式中缺少的开始和结束锚点。没有它们,如果输入的子字符串与正则表达式匹配,则会得到匹配。