所以我尝试使用以下正则表达式来匹配有效价格的模式
^\$[1-9]\d{0,2}(?:\,\d{3})?(?:\.\d{2})?
(源自SO上的另一个问题)
匹配的约束是:
$1.00 <= price <= $999,999.99
$1
有效$1.00
)$1.1
,$2.9
等。)$1.111
,$2.999
等。)上述模式可以处理前两个约束而不是其他约束。问题是,在(3)或(4)的情况下,匹配小数点之前的价格部分。
例如:
$100,000.4 matches to $100,000
$200,000.444 matches to $200,000.44
如何修改此项,以便在(3)或(4)的情况下,整个字符串不匹配?
答案 0 :(得分:3)
轻松!只需在最后添加([^,.\d$]|$)
,以便正则表达式解析器工作,直到最接近的数字,逗号,点或美元。或者它已经在字符串的末尾。
^\$[1-9]\d{0,2}(?:\,\d{3})?(?:\.\d{2})?([^,.\d$]|$)
答案 1 :(得分:2)
您可以使用否定前瞻(?![\d.,])
断言匹配价格后面没有数字,逗号或点:
\$[1-9]\d{0,2}(?:,\d{3})?(?:\.\d{2})?(?![\d.,])