嘿伙计们。我正在努力处理一个正则表达式,该表达式将与“单页/页范围”文本框中的输入匹配,这意味着用户可以输入一个整数或一个整数范围,格式较低。例如:
用一个正则表达式就可以了吗?
奖金
提前谢谢。
发布于 2009-06-10 19:57:23
正如Bryan所说,比较两个数字并不是正则表达式设计要做的事情。如果希望检查奖金情况,则应在正则表达式之外进行检查。
/^(\d+)(?:-(\d+))?$/ && $1 < $2;
尽管如此,大多数“正则表达式”引擎实际上并不是规则性,因此(例如)在Perl 5中是可能的:
m{ # /../ is shorthand for m/../
\A # beginning of string
(\d+) # first number
(?:- # a non-capturing group starting with '-'...
(\d+) # second number
(?(?{$1>=$2}) # if first number is >= second number
(?!)) # fail this match
)? # ...this group is optional
\Z # end of string
}x # /x tells Perl to allow spaces and comments inside regex
或者简称/^(\d+)(?:-(\d+)(?:(?{$1>=$2})(?!)))?$/
。在Perl 5.6.1、5.8.8和5.10.0中进行测试。
/^\s*
(\d+) (?:\s*-\s* (\d+))?
(?:\s*,\s* (\d+) (?:\s*-\s* (\d+))?)*
\s*$/x
使用一些Perl 5.10特性,甚至可以确保数字排序良好:
m{
\A\s* # start of string, spaces
(?{{$min = 0}}) # initialize min := 0
(?&RANGE) (?:\s*,\s* (?&RANGE))* # a range, many (comma, range)
\s*\Z # spaces, end of string
(?(DEFINE) # define the named groups:
(?<NUMBER> # number :=
(\d*) # a sequence of digits
(?(?{$min < $^N}) # if this number is greater than min
(?{{$min = $^N}}) # then update min
| (?!))) # else fail
(?<RANGE> # range :=
(?&NUMBER) # a number
(?:\s*-\s* (?&NUMBER))?)) # maybe a hyphen and another number
}x
发布于 2009-06-10 19:27:00
这适用于所有测试用例:
^\d+(?:-\d+)?$
编辑:除了最后一个测试用例(9-2)。检查第二个值是否大于第一个值不是正则表达式所要做的事情。
发布于 2009-06-10 19:28:04
/^(\d+)(-(\d+))?/
如果在perl中,您只需检查
if $1 <= $3
https://stackoverflow.com/questions/977634
复制相似问题