regex将捕获任何低于30万美元的货币

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

我需要在货币字段中识别任何低于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.  $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]+$


为什么你需要正则表达式来做这个?不能使用比较运算符吗?