Я смутился. Итак, вот моя проблема, у меня есть такой текст:
<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
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; }
Вы попробовали 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); ?>
демонстрация