Perl正则表达式为-1或任何正整数(但不是0)

时间:2013-08-23 16:44:17

标签: regex perl

我需要匹配一个-1或任何正整数(但不是0)的整数。这应该可以使用正则表达式,但我总是发现很难掌握。

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

感谢。

3 个答案:

答案 0 :(得分:3)

试试这个正则表达式OR:

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

live demo

中查看此正则表达式

上述正则表达式不允许使用前导零的正数。如果你想允许这样做,试试这个,它使用负向前看来排除所有零:

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

live demo

中查看此正则表达式

答案 1 :(得分: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

大多数编程都是你(或者是追随你的穷人)维护你的程序:添加功能,追踪错误。

不要试图太过切肉刀。仅仅因为某些东西需要更少的行来输入并不意味着它更有效或更好。

答案 2 :(得分:1)

你可以使用这样的模式:

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

这将匹配文字-1或1到9之间的单个数字,然后是0到9之间的零个或多个数字。

如果您想确保此数字是输入字符串中允许的唯一事物,请将start(^)和end($)锚定在模式:

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