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 回答