Даны перменные:
$input=`<div class='someclass1'>text2</div><div class='someclass2'>text1</div>`;
Как получить массив из text1 и text2?
Я использую:
$reg=`/<div class='someclass[0-9]'>[a-A0-9]<\/div>/` // регулярка
preg_match_all($reg, $text, $output); // разбиваем строку в массив по регулярке
$delete_array=[`/<div class='someclass[0-9]'>/`, `/<\/div>/`]; // массив на удаление
$output=preg_replace($delete_array, '', $output[0]); // ['text1', 'text2']
То есть входную строку разбиваю на массив по регулярному выражению и из полученного массива строк убираю лишнее.
Проблема - приходится подавать в функцию много переменных.
Вопрос - можно ли обойтись без $delete_array и выполнить эту задачу за 1 процедуру?
Почитал про регулярки, но не понял как поколдовать над ними, чтобы в $output выходили сразу искомые значения, без использования preg_replace()
Парсить DOM нужно с помощью парсеров DOM.
$str = "<div class='someclass1'>text2</div><div class='someclass2'>text1</div>";
$dom = new DomDocument();
$dom->loadHTML($str);
// $result = array_map(function($div){return $div->nodeValue;}, iterator_to_array($dom->getElementsByTagName('div')));
$divs = $dom->getElementsByTagName('div');
$result = [];
foreach ($divs as $div) {
$result[] = $div->nodeValue;
}
var_dump($result); // ["text2", "text1"]
Можно попробовать применить следующее регулярное выражение:
\>(\w+)?\<
Результат
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости