-1

我一直很困惑。所以这是我的问题,我有这样的文字:

<ORGANIZATION>Head of Pekalongan Regency</ORGANIZATION>, Dra. Hj.. Siti Qomariyah , MA and her staff were greeted by <ORGANIZATION>Rector of IPB</ORGANIZATION> Prof. Dr. Ir. H. Herry Suhardiyanto , M.Sc. and <ORGANIZATION>officials of IPB</ORGANIZATION> in the guest room.

我正在尝试<ORGANIZATION>使用我的代码获取标签内的值:

function get_text_between_tags($string, $tagname) {
    $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
    preg_match($pattern, $string, $matches);
    if(!empty($matches[1]))
        return $matches[1];
}

officials of IPB但是当有 3 个标签时,此代码仅从最后一个标签 () 中检索一个值<ORGANIZATION>

现在,我不知道修改此代码以获取标签内的所有值而不会重复。所以请帮忙,提前谢谢。:D

4

2 回答 2

4

preg_match只会返回第一个匹配项,如果出现以下情况,您当前的代码将失败:

  • 标签的大写方式不同
  • 标签的内容不止一行
  • 同一行上有多个标签。

相反,试试这个:

function get_text_between_tags($string, $tagname) {
    $pattern = "/<$tagname\b[^>]*>(.*?)<\/$tagname>/is";
    preg_match_all($pattern, $string, $matches);
    if(!empty($matches[1]))
        return $matches[1];
    return array();
}

使用正则表达式进行解析是可以接受的,因为这是一个明确定义的案例。>但是请注意,无论出于何种原因,如果标签的属性值内部存在一个,它将失败。

如果你想避免小马的愤怒,试试这个:

function get_text_between_tags($string, $tagname) {
    $dom = new DOMDocument();
    $dom->loadHTML($string);
    $tags = $dom->getElementsByTagName($tagname);
    $out = array();
    $length = $tags->length;
    for( $i=0; $i<$length; $i++) $out[] = $tags->item($i)->nodeValue;
    return $out;
}
于 2013-05-09T04:20:16.247 回答
-2

你试过这个strip_tags()功能吗?

<?php

    $s = "<ORGANIZATION>Head of Pekalongan Regency</ORGANIZATION>, Dra. Hj.. Siti Qomariyah , MA and her staff were greeted by <ORGANIZATION>Rector of IPB</ORGANIZATION> Prof. Dr. Ir. H. Herry Suhardiyanto , M.Sc. and <ORGANIZATION>officials of IPB</ORGANIZATION> in the guest room.";

    $r = strip_tags($s);

    var_dump($r);

?>

演示

于 2013-05-09T04:01:52.823 回答