我想看看我的号码是否在两个其他号码之间。比方说我的数字是0.17。我希望正则表达式是这样的:[0.15-0.22]
。有人可以帮助我走上正轨吗?
答案 0 :(得分:2)
如果您确定您的号码始终是有效号码,那么您不需要正则表达式。只需检查$num < 0.22 && $num > 0.15
。
如果您的号码无效,请使用正则表达式对其进行过滤:
preg_match( "/[0-9]*(\.[0-9]*)/", $num, $matches );
$num = $matches[0];
答案 1 :(得分:1)
这是一个让你入门的正则表达式,但它是很多工作,不太可能是非常有益的。如果可以,请使用@Dark Slipstream的想法。
(?<!\d)0?\.(?:1[5-9]|2[0-1]|220*([^1-9]|$))
参见;-)这就是为什么正则表达式不是为解决你的问题而设计的。
听起来你想要一个通用的解决方案,所以当它是 posible 时,你还没有写下足够的细节。你需要考虑你正在寻找的数字的精确度,以及你想要一个包容性或排他性的范围(或者最简单的范围)。顺便说一句,最简单的是左侧是包容性的,右侧是独占的(区间符号[0.15 - 0.22)
),因为你可以简单地从.01
中减去.22
然后分解问题分为2-3个部分\.(?:1[5-9]|.2[0-1])
。
答案 2 :(得分:1)
我认为你应该重新考虑一下你的方法。不要试图匹配正则表达式中的范围(这可能是可行的,但不是很漂亮),尝试匹配您正在寻找的数字,然后使用您喜欢的语言测试它是否在正确的范围内。这是一个Python3会话:
>>> import re
>>> a_string = "A number can be 0.17 or 0.163 but certainly not 0.47 or -1.2!"
>>> matches = re.findall(r'(-?[0-9]+\.?[0-9]+)', a_string)
>>> print(matches)
['0.17', '0.163', '0.47', '-1.2']
>>> nums = [n for n in [float(c) for c in matches] if n < 0.22 and n > 0.15]
>>> print(nums)
[0.17, 0.163]