Как найти более одной переменной в строке, используя preg_match?

1

Как найти более одной переменной в строке с помощью preg_match?

У меня ниже строки в переменной php, где значения переменных, которые нужно найти, подсвечиваются.

$var = '<div class="CK mag10">OKT: **VARVALUE1**<span class="OK1 OK2">|</span>MOK: **VARVALUE2**<span class="OK1 OK2">|</span>ISIN: **VARVALUE3**<span class="OK1 OK2">|</span>SOCCER: **VARVALUE4**</div>';

Я написал этот код:

$found_matches = preg_match('/\<div class=\"CK mag10\">OKT: ([0-9A-Za-z]+)\<span class=\"OK1 OK2\"\>|\<\/span\>MOK: ([0-9A-Za-z]+)\<span class=\"OK1 OK2\"\>|\<\/span>ISIN: ([0-9A-Za-z]+)\<span class=\"OK1 OK2\"\>|\<\/span>SOCCER: ([0-9A-Za-z]+)\<\/div\>/i', $var, $matches);

но он дает мне только одно значение не все значения переменных. Есть ли способ получить все значения переменных, сложенные в один единственный массив $?

  • 4
    preg_match_all
Теги:

2 ответа

0
Лучший ответ

Возможно, эта функция полезна для вас:

preg_match_all("/(?<=startTag)[\w]+(?=endTag)/", $input_lines, $output_array);

startTag= изменить строку до строки по умолчанию перед словом, которое вы хотите извлечь.

endTag= изменить свою строку на строку по умолчанию после окончания слова, которое вы хотите извлечь.

Образец - preg_match или preg_match_all

Выход

array(
    0   =>  array(
        0   =>  VARVALUE1
        1   =>  VARVALUE2
        2   =>  VARVALUE3
        3   =>  VARVALUE4
    )
)
0

Вот способ

  1. Разбирайте HTML с DOM
  2. Получать результаты в безопасном режиме

Вот пример кода:

<?php
$html = <<<HTML
<div class="CK mag10">OKT: VARVALUE1<span class="OK1 OK2">|</span>MOK: VARVALUE2<span class="OK1 OK2">|</span>ISIN: VARVALUE3<span class="OK1 OK2">|</span>SOCCER: VARVALUE4</div>
HTML;
$arr = array();
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);
$xp = new DOMXPath($dom);
$links = $xp->query('//div[@class="CK mag10"]');
foreach ($links as $link) {
    $chks = explode('|', $link->nodeValue);
    foreach ($chks as $chk) {
        if (preg_match('/\s*[A-Z]+:\s+(.*)/', $chk, $matches)) {
           array_push($arr, $matches[1]);
        }
    }
}
print_r($arr);

См. Демонстрацию IDEONE

Ещё вопросы

Сообщество Overcoder
Наверх
Меню