PHP:返回string中所有指定标记的所有字符串值

时间:2012-09-22 01:21:35

标签: php regex

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

1 个答案:

答案 0 :(得分: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>/似乎有效。区别在于?.*> - &gt; ?.*?>

使用新正则表达式进行演示:http://viper-7.com/4UxX0h