2015-08-25 2 views
1

Как найти более одной переменной в строке с помощью preg_match?Как найти более одной переменной в строке с помощью 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' – ndn

ответ

0

Может быть, эта функция полезна для вас:

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

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

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

Sample - 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 demo

Смежные вопросы