这就是我一直在使用
\$?[0-9]+\.*[0-9]*但当我做一些测试时,我注意到像
But when i was doing some testing i noticed that things like
$$$34.00将作为匹配返回(但 matcher.group())只返回匹配的子字符串。如果用户输入一个以上的美元符号,我不希望它甚至传递正则表达式,所以我尝试了这个:
would return as a match (but matcher.group()) just returns the matched substring. I don't want it to even pass the regular expression if the user enters more than one dollar sign so i tried this:
\${1}[0-9]+\.*[0-9]*但这似乎与我第一次输入的正则表达式相同。现在我正在java中测试它,但是,我计划在c ++中使用Boost库来使用它。但请不要在这里给我解决方案,因为我试图在没有人给我答案的情况下学习。
but this seems to behave the same as the regular expression i first typed. Right now i'm testing this in java but, i plan to use it in c++ using the Boost libraries. But Please don't give me that solution here because i'm trying to learn without someone giving me the answer.
但我确实需要帮助,因此用户只能输入一个美元符号(这就是我所想的 \ $ {1} 会这样做)
But i do need help making it so the user can only enter one dollar sign (which is what i thought \${1} would do)
推荐答案因为你这样做是为了学习正则表达式...
Since you're doing this to learn regex...
^ \ $(([1-9] \d {0,2}(,\d {3})*)|(( [1-9] \d *)?\ d))(\。\\\)?$
细分:
^ \ $ 以$美元符号开头的字符串
^\$ start of string with $ a single dollar sign
([1-9] \d {0,2}(,\d {3})*) 1-3第一个数字不是0的数字,后跟0个或更多个带3个数字的逗号
([1-9]\d{0,2}(,\d{3})*) 1-3 digits where the first digit is not a 0, followed by 0 or more occurrences of a comma with 3 digits
或
(([1-9] \d *)?\ d)一个或多个数字,只有当它是唯一的数字时,第一个数字才能为0
(([1-9]\d*)?\d) 1 or more digits where the first digit can be 0 only if it's the only digit
(\.\\\)?$ 周期和2位数字可选字符串结束
(\.\d\d)?$ with a period and 2 digits optionally at the end of the string
匹配:
$4,098.09 $4098.09 $0.35 $0 $380不匹配:
$098.09 $0.9 $10,98.09 $10,980456更多推荐
Java正则表达式匹配美元金额
发布评论