我需要匹配一个-1或任何正整数(但不是0)的整数。这应该可以使用正则表达式,但我总是发现很难掌握。
如果有人能告诉我如何匹配它,并在同一时间提供一个好的解释,我会非常感激。所以我学到了一些东西。
感谢。
答案 0 :(得分:3)
试试这个正则表达式OR:
/^-1|[1-9]\d*$/
中查看此正则表达式
上述正则表达式不允许使用前导零的正数。如果你想允许这样做,试试这个,它使用负向前看来排除所有零:
/^-1|(?!0+$)\d+$/
中查看此正则表达式
答案 1 :(得分:2)
不要试图太过切肉刀。我只想这样做:
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
。
大多数编程都是你(或者是追随你的穷人)维护你的程序:添加功能,追踪错误。
不要试图太过切肉刀。仅仅因为某些东西需要更少的行来输入并不意味着它更有效或更好。
答案 2 :(得分:1)
你可以使用这样的模式:
-1|[1-9][0-9]*
这将匹配文字-1
或1到9之间的单个数字,然后是0到9之间的零个或多个数字。
如果您想确保此数字是输入字符串中允许的唯一事物,请将start(^
)和end($
)锚定在模式:
^-1|[1-9][0-9]*$