如果我在字符串中有以下文字:
<h4>Tom</h4>
<p>One Paragraph</p>
<p>Two Paragraph</p>
我需要在该字符串上解析哪些代码才能获得这样的输出(如果我不知道<h4>
标记内的内容是什么?
<p>One Paragraph</p>
<p>two Paragraph</p>
谢谢!
答案 0 :(得分:10)
您可以使用strstr
获取以</h4>
开头的子字符串,并使用substr
删除</h4>
:
$needle = '</h4>';
$rest = substr(strstr($string, $needle), strlen($needle));
自PHP 5.3起,您还可以使用 true 指定第三个参数 before_needle :
$rest = strstr($string, $needle, true);
另一种方法是使用explode
:
list(,$rest) = explode($needle, $string, 2);
答案 1 :(得分:5)
使用stripios开始</h4>
。将</h4>
的长度添加到偏移量,然后使用substr获取偏移后的所有文本。
示例:
$str = '....Your string...';
$offset = stripos($str, '</h4>');
if ( $offset === false ){
//error, end of h4 tag wasn't found
}
$offset += strlen('</h4>');
$newStr = substr($str, $offset);
我应该指出,如果HTML变得更复杂或者你不控制HTML,你可能想要使用HTML parser。如果(例如)遇到< /h4 >
而不是</h4>
,它会更加健壮且不太可能失败。但是,在这种情况下,它是过度的。
答案 2 :(得分:1)
除非您发布的示例HTML特别代表您的数据集,否则您可能会发现使用this one等HTML解析器更容易,更可靠。
HTML很难用正则表达式可靠地解析(技术上,不可能),解析器将为您提供一种非常简单的方法来查找您感兴趣的节点。
如果您对以上HTML感兴趣,那么您可以制作一个合适的正则表达式。对于任何更通用的东西,我会探索解析器路径。