在PHP中的复杂标记之间获取文本

时间:2010-02-15 16:25:45

标签: php regex tags expression

我正在尝试从两个html标签之间获取文本,但难点在于标签可能与名称不同。

我会详细解释:

<icon displayid="62115">inv_helmet_130</icon>

我必须得到

  

inv_helmet_130

但是标签的 displayid 可能有所不同,有关如何解决此问题的任何想法?也许是经常的爆发,但我不擅长那些。

提前致谢。

3 个答案:

答案 0 :(得分:3)

Simple HTML DOM Parse r应该能够处理:

$html = file_get_html('http://www.example.com/');

foreach($html->find('icon') as $element) 
       echo $element->innertext . '<br>';

你可以像这样单挑出来:

echo $html->find('icon', 0)->innertext; // get me the first

答案 1 :(得分:1)

不要使用正则表达式来处理HTML。

使用专为XML / HTML设计的内容,例如XPath。它已经是PHP's libraries的一部分。

你想要的XPath表达式将会是这样的,

//icon/text()

其中显示“从文档中的任何icon元素中选择文本,无论其ID或父级如何。”

答案 2 :(得分:0)

由于<icon>不是有效的HTML标记,因此我假设您正在使用XML或其他标记语言。 PHP有一个非常方便的扩展来处理XML:

<?php

$xml = simplexml_load_string('<?xml version="1.0"?><icon displayid="62115">inv_helmet_130</icon>');
echo (string)$xml[0];

?>

确切的代码当然取决于您的确切字符串。正如所建议的那样,xpath搜索可以做到这一点。