我需要匹配一个整数,它要么是 -1,要么是任何正整数(但不是 0)。使用正则表达式应该可以做到这一点,但我一直觉得很难掌握。
如果有人能告诉我如何匹配它,我会非常感激,并同时提供一个很好的解释,所以我学到了一些东西。
谢谢。
不要试图太刻薄。我会这样做:
if (( $value == int( $value ) and $value > 0 ) or $value == -1 ) {
....
}
并避免容易出错的正则表达式——尤其是当它们变得过于复杂时。
这使您非常清楚您想要什么。您需要一个大于 0或-1 的整数。另外,如果这实际上比解析正则表达式更有效,我也不会感到惊讶。
让我们看看这个解决方案:
if ( $value =~ /-1|[1-9][0-9]*/ ) {
....
}
这将匹配-1
并且将匹配42
,但不是0
。但是,它也会匹配-1344
和1vvv
。也不会匹配阿拉伯语٢٤
中的整数42
。
大部分的编程工作是你(或追随你的可怜的傻瓜)维护你的程序:添加功能,跟踪错误。
不要试图太刻薄。仅仅因为输入更少的行并不意味着它更有效或更好。
您可以使用这样的模式:
-1|[1-9][0-9]*
这将匹配-1
从 1 到 9 的文字或单个数字,后跟从 0 到 9 的零个或多个数字。
如果您想确保此数字是输入字符串中唯一^
允许的内容,请在模式周围放置 start ( ) 和 end ( $
) 锚点:
^-1|[1-9][0-9]*$