0
function getValues($string, $tagname) {

    $pattern = "/<$tagname ?.*>([^<>]*)<\/$tagname>/";
    preg_match_all($pattern, $string, $matches, PREG_PATTERN_ORDER);
    var_dump($matches);
    return $matches;
}

getValues("<a>1</a><a>2</a><a>3</a>", "a");

配列値1、2、3などを取得する予定です。

それは戻ります:

array(2) {
  [0]=>
  array(1) {
    [0]=>
    array(2) {
      [0]=>
      string(24) "<a>1</a><a>2</a><a>3</a>"
      [1]=>
      int(0)
    }
  }
  [1]=>
  array(1) {
    [0]=>
    array(2) {
      [0]=>
      string(1) "3"
      [1]=>
      int(19)
    }
  }
}
4

1 に答える 1

2

私はこれに正規表現を使用しません-次のようなdomパーサーを使用します:

<?php
function getValues($string, $tagname) {
    $return = [];
    $document = new DomDocument();
    $document->loadHtml($string);
    $elements = $document->getElementsByTagName($tagname);
    foreach($elements as $element) {
        $return[] = $element->nodeValue;
    }
    return $return;
}


var_dump(getValues("<a>1</a><a>2</a><a>3</a>", 'a'));

domパーサーを使用したデモ:http://viper-7.com/NBtiNC

編集:ただし、正規表現をに変更すると機能する/<$tagname ?.*?>([^<>]*)<\/$tagname>/ようです。違いは?.*>->?.*?>

新しい正規表現を使用したデモ:http://viper-7.com/4UxX0h

于 2012-09-22T01:31:12.053 に答える