我遇到了PHP正则表达式匹配的问题.
我试图解决的问题是我需要从字符串中获取十进制值.表达式需要满足以下所有条件(所有美元符号可选):
($)1234.56
($)1,234.56
($)1.00
($)10
($).49
($)1,234,567.32
($)1,234,567
Run Code Online (Sandbox Code Playgroud)
在网上找到一些精彩的例子之后,我能够将Frankentstein的这个表达结合起来:
/(?:^|\s|\$)([1-9](?:\d*|(?:\d{0,2})(?:,\d{3})*)(?:\.\d*[0-9])?|0?\.\d*[0-9]|0)(?:\s|$)/
Run Code Online (Sandbox Code Playgroud)
如果你在solmetra上使用这个preg_match测试器,使用上面的模式和测试字符串'每单价$ 19198.01嘿!' 你将得到以下结果:
Array
(
[0] => $19198.01
[1] => 19198.01
)
Run Code Online (Sandbox Code Playgroud)
哪个好 - 这正是我需要的!
但是,当我在PHP 5.3.10中运行以下代码时,我得到null作为使用此模式字符串的匹配的输出:
码:
$pattern = '/(?:^|\s|\$)([1-9](?:\d*|(?:\d{0,2})(?:,\d{3})*)(?:\.\d*[0-9])?|0?\.\d*[0-9]|0)(?:\s|$)/';
$subject = 'per unit price $19198.01 hey!';
$matches = preg_match($pattern,$subject);
var_dump($matches[0]); //dumps "null"
Run Code Online (Sandbox Code Playgroud)
我确定我做错了什么,但我看不到它.
任何帮助将不胜感激.
环境:
PHP 5.3.10
Apache 2.2.21
Windows 2008 Server
Run Code Online (Sandbox Code Playgroud)