Я продолжаю искать два значения внутри строки. Я знаю, что мне нужно использовать следующую команду в 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) )
К сожалению, он не вернет данные, содержащиеся в CDATA
. Поэтому я пытаюсь получить следующую информацию из этой строки:
Матч 1: 312.09999999999997
Матч 2: 510,75
Кто-нибудь знает, что я делаю неправильно?
$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
)
LIVE DEMO
измените свое регулярное выражение на следующее:
/<!\[CDATA\[([0-9a-z_\-.]+)\]\]>/
вам нужно избежать буквенного дефиса или механизм регулярных выражений предполагает, что он ищет диапазон (например, 0-9 или az), и вы не разрешаете периоды.
Я поставил его в сценарий быстрого тестирования, используя предоставленную вами строку:
<?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);