【问题标题】:How to find more than one variable in a string using preg_match?如何使用 preg_match 在字符串中查找多个变量?
【发布时间】:2015-08-25 13:24:01
【问题描述】:

如何使用 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 中?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    也许这个功能对你有用:

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

    【讨论】:

      【解决方案2】:

      这是一种方法

      1. 用 DOM 解析 HTML
      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-17
        • 2011-04-13
        • 2018-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        相关资源
        最近更新 更多