Я пытаюсь получить все матчи, но я получаю только один
Вот моя строка
$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).
Вместо этого вам лучше просто заменить (.+)
([^"]+)
в вашем регулярном выражении.