我正在尝试创建一个正则表达式,该表达式与美元符号后的数字匹配,但此后没有任何美分。
33.92美元-没有匹配项
$ 211-匹配211
这是我到目前为止所拥有的。
(?<=\$)\d+(?!\.)
看着这个字符串...
事物$ 122.30 $ 45 $ 1.111
...正确匹配“ 45”,但也匹配“ 12”。
我知道为什么会出错,但是我不知道如何解决。
谢谢
答案 0 :(得分:2)
您可以使用
(?<=\$)\d+(?![.\d])
请参见regex demo。
同义词表达式,显示所有格修饰符和原子分组的使用:
(?<=\$)\d++(?!\.)
(?<=\$)(?>\d+)(?!\.)
对于那些不支持向后看的环境的表达式,应在\d+
模式周围有一个捕获组:
\$(\d+)(?![.\d])
^ ^
然后所需的值在组1中。
仅供参考:\$([0-9]+)($|[^.0-9])
甚至适用于POSIX ERE。
详细信息
(?<=\$)
-$
必须立即出现在当前位置的左侧\d+
-1个以上数字(?![.\d])
-当前位置的右侧不应出现点或数字。正则表达式图:
答案 1 :(得分:1)
对于PCRE
引擎(PHP
等),您可以使用
\$\d+\.\d+(*SKIP)(*FAIL)|\$\d+
\$\d+\.\d+(*SKIP)(*FAIL) # match any $123.3323223 format
# and "forget" the matches
| # or
\$\d+ # match your desired format
答案 2 :(得分:0)
您可以和我一起使用 (?<= \ $)\ d ++(?!。)