PHP preg_match_all 找不到值
PHP preg_match_all wont find values
我一直在尝试在一个字符串中搜索两个值。我知道我必须在 PHP 中使用以下命令:
preg_match_all
也得转义。所以我尝试为此创建一个过滤器。
原码:
<![CDATA[312.09999999999997]]></var><var n='destinationX' t='n'><![CDATA[510.75]]>
我的实际代码:
if (preg_match_all("\<!\[CDATA\[([0-9a-z_-]+)\]\]\>\</var\>\<var n=\'destinationY\' t=\'n\'\>\<\!\[CDATA\[([0-9a-z_-]+)\]\]/i>", $packets, $matches) )
遗憾的是,它不会 return CDATA
中包含的数据。所以我试图从这个字符串中获取以下信息:
匹配 1:312.09999999999997
第 2 场:510.75
有人知道我做错了什么吗?
将您的正则表达式更改为:
/<!\[CDATA\[([0-9a-z_\-.]+)\]\]>/
您需要对文字连字符进行转义,否则正则表达式引擎将假定它正在寻找一个范围(例如 0-9 或 a-z)并且您不允许使用句点。
我使用您提供的字符串将其放入快速测试脚本中:
<?php
$matches;
$packets = "<![CDATA[312.09999999999997]]></var><var n='destinationX' t='n'><![CDATA[510.75]]>";
preg_match_all('/<!\[CDATA\[([0-9a-z_\-.]+)\]\]>/i', $packets, $matches);
$matches = $matches[1];
print_r($matches);
这给了我这样的输出:
Array ( [0] => 312.09999999999997 [1] => 510.75 )
这应该得到介于两者之间的值;
$packets = "<![CDATA[312.09999999999997]]></var><var n='destinationX' t='n'><![CDATA[510.75]]>";
$regex = "~[0-9]+\.[0-9]+~";
preg_match_all($regex, $packets, $matches);
print_r($matches);
$myString = "<![CDATA[312.09999999999997]]></var><var n='destinationX' t='n'><![CDATA[510.75]]>";
preg_match_all('/CDATA\[([a-z0-9-\.]+)\]/i', $myString, $matches, PREG_PATTERN_ORDER);
print_r($matches[1]);
输出
Array
(
[0] => 312.09999999999997
[1] => 510.75
)
现场演示
我一直在尝试在一个字符串中搜索两个值。我知道我必须在 PHP 中使用以下命令:
preg_match_all
也得转义。所以我尝试为此创建一个过滤器。
原码:
<![CDATA[312.09999999999997]]></var><var n='destinationX' t='n'><![CDATA[510.75]]>
我的实际代码:
if (preg_match_all("\<!\[CDATA\[([0-9a-z_-]+)\]\]\>\</var\>\<var n=\'destinationY\' t=\'n\'\>\<\!\[CDATA\[([0-9a-z_-]+)\]\]/i>", $packets, $matches) )
遗憾的是,它不会 return CDATA
中包含的数据。所以我试图从这个字符串中获取以下信息:
匹配 1:312.09999999999997
第 2 场:510.75
有人知道我做错了什么吗?
将您的正则表达式更改为:
/<!\[CDATA\[([0-9a-z_\-.]+)\]\]>/
您需要对文字连字符进行转义,否则正则表达式引擎将假定它正在寻找一个范围(例如 0-9 或 a-z)并且您不允许使用句点。
我使用您提供的字符串将其放入快速测试脚本中:
<?php
$matches;
$packets = "<![CDATA[312.09999999999997]]></var><var n='destinationX' t='n'><![CDATA[510.75]]>";
preg_match_all('/<!\[CDATA\[([0-9a-z_\-.]+)\]\]>/i', $packets, $matches);
$matches = $matches[1];
print_r($matches);
这给了我这样的输出:
Array ( [0] => 312.09999999999997 [1] => 510.75 )
这应该得到介于两者之间的值;
$packets = "<![CDATA[312.09999999999997]]></var><var n='destinationX' t='n'><![CDATA[510.75]]>";
$regex = "~[0-9]+\.[0-9]+~";
preg_match_all($regex, $packets, $matches);
print_r($matches);
$myString = "<![CDATA[312.09999999999997]]></var><var n='destinationX' t='n'><![CDATA[510.75]]>";
preg_match_all('/CDATA\[([a-z0-9-\.]+)\]/i', $myString, $matches, PREG_PATTERN_ORDER);
print_r($matches[1]);
输出
Array
(
[0] => 312.09999999999997
[1] => 510.75
)
现场演示