regex将捕获任何低于30万美元的货币
我需要在货币字段中识别任何低于300000的值。我创建了一个正则表达式,它可以对100万以下的任何数字执行此操作,但我需要将其截断为299999.99美元 下面列出了100万的代码regex将捕获任何低于30万美元的货币,regex,pcre,Regex,Pcre,我需要在货币字段中识别任何低于300000的值。我创建了一个正则表达式,它可以对100万以下的任何数字执行此操作,但我需要将其截断为299999.99美元 下面列出了100万的代码 ^\$?\d{0,3}\d{0,2}、\d{0,3}\.\d{0,2}$正则表达式不是您的最佳选择 为了说明这一点,我将使用您为100万美元案例发布的正则表达式。在我看来,您正在尝试适应各种条件,包括: $10 vs. $10.00 $100 vs. 100 $100 vs. $100
^\$?\d{0,3}\d{0,2}、\d{0,3}\.\d{0,2}$正则表达式不是您的最佳选择 为了说明这一点,我将使用您为100万美元案例发布的正则表达式。在我看来,您正在尝试适应各种条件,包括:
$10 vs. $10.00
$100 vs. 100
$100 vs. $10000
$10,000 vs. $100,000
etc.
但你所做的方式允许这样的事情:
$10000000.00
因为:
$ matches ^\$?
100 matches \d{0,3}?
00 matches \d{0,2}
[no comma ] matches ,?
000 matches \d{0,3}
.00 matches (\.(\d{0,2}))?$
测试
换言之,如果你试图匹配一些东西,比如小数字没有逗号,大数字有逗号,以及小、中、大数字中可能出现的各种数字分组,那么你就会得到一个正则表达式,它匹配的数字远远大于100万美元
虽然正则表达式的用途非常广泛,现代正则表达式引擎的功能也非常强大,但要执行您试图执行的操作,一个健壮的正则表达式将非常繁琐、难以阅读,而且很难维护
它也将足够复杂,它将显示regex可以被适当地视为一种编程语言的方式
但最重要的是,任何正则表达式都是在周围编程语言的上下文中使用的,所以为什么不使用编程语言本身的功能呢?它可能需要更多的输入,但可能需要更少的时间,而且结果将更易于编写、阅读和维护。给你,300000.00美元到1000000.00美元
?
可读版本
(?<! \S )
\$?
( # (1 start)
3 \d{2} ,? \d{3}
| [4-9] \d{2} ,? \d{3}
| 1 0{6}
| 1 ,? 000 ,? 000
) # (1 end)
( # (2 start)
\.
\d{0,2}
)? # (2 end)
(?! \S )
可以使用以下正则表达式: ^\$[0-2]?[0-9]{0,2}、[0-9]{0,3}\[0-9]+$
为什么你需要正则表达式来做这个?不能使用比较运算符吗?