我在PCRE
使用以下preg_match
表达式来检查我想要的值是否为数字。
(?P<id>[\d]+)
它有效,但现在我希望它匹配相同的条件,除非整个内容等于0
(零)。
示例结果
1 valid
10 valid
0 invalid
表达式上下文
#^(?P<controller>.*?|home)(?:/(?P<action>.*?|index)(?:/(?P<id>[\d]+))?)?$#uD
答案 0 :(得分:1)
您可以使用此正则表达式:
^(?!0+$)(?P<id>\d+)$
<强>更新强>
工作正则表达式:
'#^(?P<controller>[^/]*|home)(?:/(?P<action>[^/]*|index)(?:/(?!0+$)(?P<id>\d+))?)?$#'
答案 1 :(得分:1)
你能试试吗?
#^(?P<controller>home)(?:/(?P<action>index)(?:/(?P<id>[1-9][\d]*))?)?$#uD
在你的例子中,只使用数字,它首先匹配,所以很明显0被捕获。假设你的匹配字符串比那个更复杂,在这种情况下,“1-9一次和0-9 0或更多次”应该为你做。