【发布时间】:2009-05-14 08:41:54
【问题描述】:
我正在努力检查 Perl 中版本号的有效性。正确的版本号是这样的:
- 以 v 或 ver 开头,
- 后面是一个数字,如果是0,则这部分不允许有其他数字(例如10、3993和0可以,01不行),
- 之后是句号、数字、句号、数字、句号和数字。
即有效的版本号可能类似于 v0.123.45.678 或 ver18.493.039.1。
我想出了以下正则表达式:
if ($ver_string !~ m/^v(er)?(0{1}\.)|([1-9]+\d*\.)\d+\.\d+\.\d+/)
{
#print error
}
但这不起作用,因为像 verer01.34.56.78 这样的版本号被接受了。我无法理解这一点,我知道 Perl 往往是贪婪的,但不应该 ^v(er) 吗?确保最多可以有一个“er”?为什么不 0{1}。只匹配“0.”,而不是接受“01.”也一样?
这个正则表达式实际上抓住了“rere”的东西:m/^v(er)?[0-9.]+/ 但我看不到我在尝试中允许它的位置。
【问题讨论】: