0

私はこれを学ぼうとしましたが、何らかの理由でそれはうまくいきません。

私は次のものを持っています:

  • ここにテキスト: 5.3 x 6.0x40メートル
  • コードでは次のとおりです。

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

    このHTMLは変数内にあり、$dimensionsと呼びましょう5.3 x 6.0 x 40 metres。preg_match_allを使用して抽出しようとしています。理想的には、ディメンションと測定値を抽出していますが、結果をエコーするのに問題があります。一致のサイズが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
    
    4

    3 に答える 3

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

    以上で各寸法の数値がわかります

    于 2012-08-04T03:21:44.790 に答える
    0

    var_dumpを使用して、配列に含まれる内容を確認してください。

    <?php
    $a = array(1, 2, array("a", "b", "c"));
    var_dump($a);
    ?>
    
    于 2012-08-04T03:07:34.930 に答える
    0
    $dimensions = '<li><b>
    text here:
    </b>
    5.3 x 6.0 x 40 metres 
    </li>';
    $t = simplexml_load_string($dimensions);
    echo $t;
    

    それはあなたがあなたの値を得るよりも5.3x6.0x40メートルを抽出します

    于 2012-08-04T03:31:34.810 に答える