Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP regexp for/prefix/action(/id)_Php_Regex - Fatal编程技术网

PHP regexp for/prefix/action(/id)

PHP regexp for/prefix/action(/id),php,regex,Php,Regex,我正在尝试构建一个匹配两个字符串的regexp: /prefix/action 及 但不是 /prefix/action/ 或 其中43可以是类似于[0-9]+的任何内容,前提是前面有斜杠 我还想将数字(不是斜杠)捕获为一个命名组(如果有的话) ~/prefix/action/?(?P<itemID>[0-9]+)?~ ~/prefix/action/?(?P[0-9]+)~ 这个表达式确实匹配,除了数字前面必须有斜杠的条件外,我所有添加lookahead或lookahead

我正在尝试构建一个匹配两个字符串的regexp:

/prefix/action

但不是

/prefix/action/

其中43可以是类似于[0-9]+的任何内容,前提是前面有斜杠

我还想将数字(不是斜杠)捕获为一个命名组(如果有的话)

~/prefix/action/?(?P<itemID>[0-9]+)?~
~/prefix/action/?(?P[0-9]+)~
这个表达式确实匹配,除了数字前面必须有斜杠的条件外,我所有添加lookahead或lookahead断言的尝试都失败了

我确实明白,通过额外的外部处理,任务是可以解决的,但我只是在寻找一个regexp解决方案。谢谢你的理解

非常感谢你的建议

解决者:

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

/
和下面的数字都可选怎么样

^/prefix/action(?:/[0-9]+)?$
要捕获命名组中的可选数字,请在数字regex周围添加
(?p..)

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

还要注意,我添加了开始和结束锚,它们在正则表达式中缺失。如果您有一个与正则表达式匹配的输入子字符串,那么如果没有它们,您将得到一个匹配项。

请指定如何将其与命名组混合使用?@etranger:更新了答案。etranger,而不是将
-solved
附加到问题的主题标题,请接受codaddict的正确答案。在发布后的几分钟内,我都做不到,我现在已经做到了。
^/prefix/action(?:/[0-9]+)?$
^/prefix/action(?:/(?P<itemID>[0-9]+))?$