匹配号如果大于零

时间:2014-01-29 20:10:47

标签: php regex pcre

我在PCRE使用以下preg_match表达式来检查我想要的值是否为数字。

(?P<id>[\d]+)

它有效,但现在我希望它匹配相同的条件,除非整个内容等于0(零)。

示例结果

1    valid
10   valid
0    invalid

表达式上下文

#^(?P<controller>.*?|home)(?:/(?P<action>.*?|index)(?:/(?P<id>[\d]+))?)?$#uD

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

^(?!0+$)(?P<id>\d+)$

在线演示:http://regex101.com/r/dB2eT3

<强>更新

工作正则表达式:

'#^(?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或更多次”应该为你做。

请参阅:http://regex101.com/r/yK6mR5