preg_match_all неверный шаблон
Я пытаюсь выделить все слова в рамках заранее определенного шаблона, но это не работает:
$html = "<tooltip>Do</tooltip> you<tooltip>know</tooltip>";
Я хочу, чтобы preg_match_all вернулся
Array ( [0] => Array ( [0] => Do) [1] => Array ( [0] => знать))
Используя этот шаблон:
preg_match_all("/<tooltip ?.*>(.*)<\/tooltip>/", $html, $matches);
Вместо этого он возвращается:
Array ([0] => Array ([0] => Знаете ли вы) [1] => Array ([0] => знаете))
Я предполагаю, что это мой шаблон, но я не знаю что?>
Есть идеи?
Спасибо
4 ответа
Это не совсем так, но регулярное выражение для выбора данных работает нормально. То, как он строит массив, не совсем соответствует тому, что вы ищете. Но с небольшой настройкой я уверен, что вы можете понять это
<?php
$html = "<tooltip>Do</tooltip> you<tooltip>know</tooltip>";
preg_match_all("~<tooltip>(.*?)<\/tooltip>~", $html, $matches);
print_r($matches);
foreach($matches[0] as $key => $value) {
$arr[] = $value;
}
print_r($arr);
?>
$arr затем возвращает Array ( [0] => Do [1] => know )
что ближе к тому, что вы ищете.
Проверьте этот пост, почему мы не используем регулярные выражения для анализа HTML.
Если вы продолжаете использовать regex для извлечения html, то используйте предоставленное regex @Lee
<tooltip[^>]*>(.*?)</tooltip>
Но это не удастся для (и многих других):
<tooltip attr="some > pretend > stuff">Do</tooltip> you<tooltip>know</tooltip>
Выше может никогда не случиться с вами. В программировании не так много гарантий, но если бы их не было, вы бы это не приняли. DomDocument дает вам эту гарантию с HTML. Ваш звонок
Я не эксперт по регулярным выражениям, я использую Expresso для создания чего-то, что работает, но я не собираюсь говорить, что это лучшее или самое надежное регулярное выражение, которое вы могли бы использовать.
Это похоже на работу, однако
<tooltip[^>]*>(.*?)</tooltip>
так:
preg_match_all("/<tooltip[^>]*>(.*?)<\/tooltip>/", $html, $matches);
Попробуй это:
preg_match_all("/<tooltip>([^<]+)<\/tooltip>/is", $html, $out);
Вы получите желаемый результат, но в $out[1] не в $out[0].
[1] => Array
(
[0] => Do
[1] => know
)