有没有人能为我提供以下模式的正则表达式?
$1234
$31234.3
$1234.56
$123456.78
$.99
我的要求是小数点前的数字不应超过6位,小数点后的数字不应超过2位。请帮帮我。谢谢。
有没有人能为我提供以下模式的正则表达式?
$1234
$31234.3
$1234.56
$123456.78
$.99
我的要求是小数点前的数字不应超过6位,小数点后的数字不应超过2位。请帮帮我。谢谢。
^\$(?=.*\d)\d{0,6}(\.\d{1,2})?$
(?=.*\d)
确保字符串中至少有一个数字。如果没有这个条件,正则表达式 ^\$\d{0,6}(\.\d{1,2})?$
将会匹配字符串 $
。
顺便提一下,预查的长度不需要这么长;即使是简单的 (?=.)
,因为正则表达式确保了随后的字符是有效的。因此,它可以简化为
^\$(?=.)\d{0,6}(\.\d{1,2})?$
\d{1,6}
要求小数点前至少有一个数字,它将不匹配 $.99
。 - Amarghosh^\$[0-9]{0,6}(\.[0-9]{1,2})?$
$
始终是元字符(除非在字符内部,例如[$]
)。 $
匹配行尾(而不是字符串结尾),即在\n
之前,并且可以出现在正则表达式的中间,当正则表达式设置为多行时(使用m
标志)。 - Amarghosh模式将会是:
^\$\d{0,6}(\.\d{0,2})?$
这个正则表达式并不验证是否有任何数字,所以"$."是一个有效的匹配,并且在原始要求中给出了一个有效的结果。
解释一下:
^
表示只有在我要查找的字符串前面没有任何东西时才匹配,例如 "USD$123.45" 在此示例中将失败,因为 $(与 \$
匹配)不是紧接在字符串开头之后。
\$
匹配美元符号,在这里使用反斜杠(\)进行转义,用于允许匹配保留字符(在正则表达式上下文中具有特殊含义),在本例中 $ 的意思是匹配字符串末尾,即此点之后没有字符。
\d
将匹配任何十进制字符,即 0-9。
{n,m}
将匹配前面元素的 n 到 m 个实例,如果 n 为 0,则表示匹配是可选的。
\.
匹配小数点,它被转义为 . 是正则表达式中的保留字符,表示匹配任何字符。
(...)
将正则表达式中包含的内容作为一组进行匹配,还有其他后果,但我会让你自己去探索。在这种情况下,它纯粹是为了正则表达式中下一个字符的好处而存在。
?
匹配前面元素的 0 或 1 次出现(在本例中,该组查找小数点和最多 2 个小数字符,因此我们期望字符串中没有带有尾随字符的小数点(0 次出现)或带有最多 2 个小数字符的小数点(1 次出现))
$
匹配字符串的结尾,在此点之后字符串中不能有任何字符。
/^\$([0-9]{0-6})|^\$([0-9]{0-6})+\.([0-9]{0-2})$|\$\.([0-9]{0-2})$/