-2

我需要匹配一个整数,它要么是 -1,要么是任何正整数(但不是 0)。使用正则表达式应该可以做到这一点,但我一直觉得很难掌握。

如果有人能告诉我如何匹配它,我会非常感激,并同时提供一个很好的解释,所以我学到了一些东西。

谢谢。

4

3 回答 3

3

试试这个正则表达式或者:

/^-1|[1-9]\d*$/

在现场演示中查看此正则表达式


上面的正则表达式不允许带有前导零的正数。如果你想允许这样做,试试这个,它使用否定的前瞻来排除所有的零:

/^-1|(?!0+$)\d+$/

在现场演示中查看此正则表达式

于 2013-08-23T16:49:06.167 回答
2

不要试图太刻薄。我会这样做:

if (( $value == int( $value ) and $value > 0 ) or $value == -1 ) {
  ....
}

并避免容易出错的正则表达式——尤其是当它们变得过于复杂时。

这使您非常清楚您想要什么。您需要一个大于 0-1 的整数。另外,如果这实际上比解析正则表达式更有效,我也不会感到惊讶。

让我们看看这个解决方案:

if ( $value =~ /-1|[1-9][0-9]*/ ) {
    ....
}

这将匹配-1并且将匹配42,但不是0。但是,它也会匹配-13441vvv。也不会匹配阿拉伯语٢٤中的整数42

大部分的编程工作是你(或追随你的可怜的傻瓜)维护你的程序:添加功能,跟踪错误。

不要试图太刻薄。仅仅因为输入更少的行并不意味着它更有效或更好。

于 2013-08-23T18:47:19.040 回答
1

您可以使用这样的模式:

-1|[1-9][0-9]*

这将匹配-1从 1 到 9 的文字或单个数字,后跟从 0 到 9 的零个或多个数字。

如果您想确保此数字是输入字符串中唯一^允许的内容,请在模式周围放置 start ( ) 和 end ( $) 锚点:

^-1|[1-9][0-9]*$
于 2013-08-23T16:49:01.160 回答