preg_match_all()如何显示结果?数组到字符串转换错误

时间:2012-08-04 02:58:33

标签: php

我试过学习这个但是无论出于什么原因它都不起作用。

我有以下内容:

  •     在这打字:          5.3 x 6.0 x 40米     
  • 在代码中是:

    <li><b>
    text here:
    </b>
    5.3 x 6.0 x 40 metres 
    </li>
    

    这个HTML在一个变量中,我们称之为$ dimensions 我正在尝试使用preg_match_all提取5.3 x 6.0 x 40 metres,理想情况下提取尺寸和测量但我无法回应结果。它表示尽管匹配的大小为5,但每次都会将数组转换为字符串错误。任何想法是怎么回事?

    preg_match_all('/\<li\>([0-9]*\.*[0-9]*)x([0-9]*\.*[0-9]*)x([0-9]*\.*[0-9]*)
                 \s*([a-zA-Z]*)\<\/li\>/',$dimensions,$matches,PREG_PATTERN_ORDER);
             echo sizeof($matches);
             echo($matches[0]);
    

    编辑:

    正如下面的答案所示:有人说使用var_dump($ matches)来查看数组包含的内容...... 结果我有4个空数组,这引出了下一个问题。我的preg_match_all出了什么问题?

    array (size=5)
        0 => 
           array (size=0)
               empty
        1 => 
           array (size=0)
               empty
        2 => 
           array (size=0)
               empty
        3 => 
           array (size=0)
               empty
        4 => 
           array (size=0)
               empty
    

    3 个答案:

    答案 0 :(得分:0)

    尝试使用var_dump来检查数组包含的内容:

    <?php
    $a = array(1, 2, array("a", "b", "c"));
    var_dump($a);
    ?>
    

    答案 1 :(得分:0)

    我建议不要首先使用pregmatch用于此类目的并使用html DOMdocument并使用XPath查询节点,将结果限制为文本本身然后使用preg_match_all

      $content = "<li>
                       <b>
                          text here:
                      </b>
                       5.3 x 6.0 x 40 metres 
                 </li>";
      $doc = new DOMDocument();
      $doc->loadHTML($content);
      $xp = new DOMXPath($doc);
      foreach($xp->query('/html/body/li/text()') as $child){
             $dimensionText = $child->textContent;
             preg_match_all('!\d+!', $dimensionText, $matches);
             print_r($matches);
      } 
    

    以上将为您提供每个维度的数值

    答案 2 :(得分:0)

    $dimensions = '<li><b>
    text here:
    </b>
    5.3 x 6.0 x 40 metres 
    </li>';
    $t = simplexml_load_string($dimensions);
    echo $t;
    

    它将提取 5.3 x 6.0 x 40米,而不是获得您的值