Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查标签&;使用PHP获取标记内部的值_Php_Text - Fatal编程技术网

检查标签&;使用PHP获取标记内部的值

检查标签&;使用PHP获取标记内部的值,php,text,Php,Text,我一直很困惑。这是我的问题,我有这样一个文本: <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

我一直很困惑。这是我的问题,我有这样一个文本:

<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.
Dra佩卡隆安摄政区负责人。Hj。。马西蒂·库马里亚和她的员工受到IPB校长Ir博士的欢迎。H.Herry Suhardiyanto,理学硕士。和IPB的官员在客房。
我正在尝试使用我的代码获取
标记内的值:

function get_text_between_tags($string, $tagname) {
    $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
    preg_match($pattern, $string, $matches);
    if(!empty($matches[1]))
        return $matches[1];
}
函数在标记($string,$tagname)之间获取文本{
$pattern=“/(.*)/”;
预匹配($pattern,$string,$matches);
如果(!empty($matches[1]))
返回$matches[1];
}
但当有3个标记时,此代码仅从最后一个标记(
IPB的官员
)检索一个值


现在,我不想修改这段代码,以便在不重复的情况下获得标记中的所有值。所以请帮忙,提前谢谢D

您是否尝试了
strip\u 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);

?>


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

@马修格雷夫斯:我不懂那篇文章(我的英语不好)。还有希望吗?为什么我否决了投票:(我试过了,但仍然不起作用。它返回了一个空数组。)对不起,之前我试过第二个代码。第一个代码是工作。谢谢师父。:)