Я пытаюсь получить все матчи, но я получаю только один
Вот моя строка
$html = '<p> This is my Home Page.</p><p><span style="line-height: 1.42857;">{{ type="slider" }} </span></p><p> </p>';
Если вы видите строку, содержащую {{ type="slider" }} , теперь, если я напишу эту строку только один раз, когда получаю ожидаемый результат, но если я напишу его несколько раз в html sting, например {{ type="slider" }} {{ type="banned" }} {{ type="testimonial" }}
$html = '<p> This is my Home Page.</p><p><span style="line-height: 1.42857;">{{ type="slider" }} {{ type="banner" }} {{ type="testimonial" }} </span></p><p> </p>';
и попытайтесь получить значения внутри моей строки {{ type=" ???? " }} это показывает странный результат
Я использую этот ниже код.
preg_match_all('/{{ type=\"(.+)\" }}/', $html, $matches, PREG_SET_ORDER); echo "<pre>"; print_r($matches); foreach ($matches as $val) { echo "matched: ". $val[0] . "<br/>"; echo "My Value" . $val[1] . "<br/>"; }
Текущий результат:
Array ( [0] => Array ( [0] => {{ type="slider" }} {{ type="banner" }} {{ type="testimonial" }} [1] => slider" }} {{ type="banner" }} {{ type="testimonial ) ) matched: {{ type="slider" }} {{ type="banner" }} {{ type="testimonial" }} My Value : slider" }} {{ type="banner" }} {{ type="testimonial
Я ожидаю результат в массиве со значениями, написанными между {{ type=" and " }}
с {{ type="slider" }} только я получаю этот результат, который является совершенным.
Array ( [0] => Array ( [0] => {{ type="slider" }} [1] => slider ) ) matched: {{ type="slider" }} My Value : slider
Есть идеи ?
Извините за мой плохой английский.
Вам нужно, чтобы ваше регулярное выражение не было жадным, добавив либо ? :
preg_match_all('/{{ type=\"(.+?)\" }}/', $html, $matches, PREG_SET_ORDER);
или модификатор U :
preg_match_all('/{{ type=\"(.+)\" }}/U', $html, $matches, PREG_SET_ORDER);
То, что вы сейчас получаете, довольно нормально, поскольку по умолчанию ваше регулярное выражение является жадным, т.е. /{{ type="(.+)"}} / Ищет самую длинную строку, начинающуюся с {{ type=" и заканчивая }} ,
Другой ответ здесь предлагает вам добавить «не-жадный» квантификатор ? и это сработает, но это не лучшее решение (потому что ему потребуется больше работы с движком regex).
Вместо этого вам лучше просто заменить (.+) ([^"]+) в вашем регулярном выражении.