希望在完全停止后将£1
与£155
的所有总和与一组可选的便士数字相匹配,以便£59.65
匹配,£0.47
和{{1不匹配。
这是我到目前为止所做的:
£155.56
1到155之间的自然数和小数
答案 0 :(得分:2)
如果你的正则表达式支持前瞻,你可以试试这个:
£(?:1(?:[0-4](?:[0-9]?(?:[.,][0-9]{1,2})?)?|5(?:[0-4](?:[.,][0-9]{1,2})?|5(?:[.,]00?)?)|[6-9]?(?:[.,][0-9]{1,2})?)?|[2-9][0-9]?(?:[.,][0-9]{1,2})?)(?![.,]?[0-9])
答案 1 :(得分:2)
怎么样:
£((\d|[1-9]\d|1[0-4]\d|15[0-4])(\.\d{2})?|155(\.00)?)
正则表达式的工作方式如下:它始终以前导井号(£
)开头。接下来,它会考虑两种情况:值小于155
的情况和155
的情况。 155
的情况很简单:155(\.00)?
:155
可选地后跟一个点和两个零。
小于155
的情况更复杂:我们分为几种情况:
\d
(零到九); [1-9]\d
; 155
,我们再次必须分支:
150
的内容:这些内容以1
开头,后跟0
和4
(含)之间的数字,后跟任意数字\d
,所以1[0-4]\d
; 150
但小于155
的那些,都以15
开头,后跟0
到{4
范围内的内容{1}}(含),15[0-4]
。所有这些都可以选择一个点和两个数字(\.\d{2}
)。
此正则表达式拒绝带前导零的数字(如09.12
),当然除非有一位数:0.85
是允许的。
我假设小数点后总是有两位数(所以0.1
和14.135
不允许),如果允许任意数量,只需将\.\d{2}
替换为{ {1}}(如果需要至少一位数字),或\.\d+
即使没有数字也是允许的。