需要正则表达式-没有美分的美元

时间:2019-05-09 09:36:23

标签: regex

我正在尝试创建一个正则表达式,该表达式与美元符号后的数字匹配,但此后没有任何美分。

  

33.92美元-没有匹配项

     

$ 211-匹配211

这是我到目前为止所拥有的。

(?<=\$)\d+(?!\.)

看着这个字符串...

  

事物$ 122.30 $ 45 $ 1.111

...正确匹配“ 45”,但也匹配“ 12”。

我知道为什么会出错,但是我不知道如何解决。

谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用

(?<=\$)\d+(?![.\d])

请参见regex demo

同义词表达式,显示所有格修饰符和原子分组的使用:

(?<=\$)\d++(?!\.)
(?<=\$)(?>\d+)(?!\.)

对于那些不支持向后看的环境的表达式,应在\d+模式周围有一个捕获组:

\$(\d+)(?![.\d])
  ^   ^

然后所需的值在组1中。

仅供参考:\$([0-9]+)($|[^.0-9])甚至适用于POSIX ERE。

详细信息

  • (?<=\$)-$必须立即出现在当前位置的左侧
  • \d+-1个以上数字
  • (?![.\d])-当前位置的右侧不应出现点或数字。

正则表达式图:

enter image description here

答案 1 :(得分:1)

对于PCRE引擎(PHP等),您可以使用

\$\d+\.\d+(*SKIP)(*FAIL)|\$\d+

请参见a demo on regex101.com


细分为:

\$\d+\.\d+(*SKIP)(*FAIL) # match any $123.3323223 format
                         # and "forget" the matches
|                        # or
\$\d+                    # match your desired format

答案 2 :(得分:0)

您可以和我一起使用 (?<= \ $)\ d ++(?!。)