如何使用preg_match在字符串中查找多个变量?

时间:2015-08-25 13:24:01

标签: php regex

如何使用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);

但它只给我一个值而不是所有变量值。 有没有办法让所有变量值都堆叠在单个数组 $ matches

2 个答案:

答案 0 :(得分:0)

也许这个功能对你有用:

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

startTag =将其字符串更改为您要提取的字词之前的默认字符串。

endTag =在结束要提取的单词后,将其字符串更改为默认字符串。

Sample - preg_matchpreg_match_all

退出

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

答案 1 :(得分:0)

这是一种

的方法
  1. 使用DOM解析HTML
  2. 以安全的方式获得结果
  3. 以下是示例代码:

    <?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