有一种非常简单的方法来获取rel属性的文本,即
<a href='#' rel='i want this text here'></a>.
我今天早上尝试使用正则表达式,但没有运气。
答案 0 :(得分:4)
Do not use regular expressions for irregular languages like HTML.您可以使用XPath实现这一目标。例如:
$doc = new DOMDocument();
$doc->loadHtml($htmlAsString);
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query('//a[@rel]');
答案 1 :(得分:1)
除非HTML是100%静态且由您控制,否则我建议您使用HTML解析器,例如DOMDocument或PHP Simple HTML DOM Parser之类的内置HTML解析器。设置比简单的正则表达式更加努力,但它在所有情况和变化中都会更加可靠。
<a href='#' rel="i want this text here"></a>
<a href='#' REL="i want this text here"></a>
<a rEL='i want this text here' href='#' ></a>
答案 2 :(得分:0)
这应该有效:
preg_match_all('%<a[^>]+rel=("([^"]+)"|\'([^\']+)\')[^>]*>%i', $html, $matches);
print_r($matches);
答案 3 :(得分:0)
正如其他人所说,你应该避免使用正则表达式来解析HTML,因为它不是常规的。但是,如果您确定HTML的结构可以使用正则表达式。以下程序将提取您想要的内容:
<?php
$a = "<a href='#' rel='i want this text here'></a>";
if(preg_match("{<a href.*?rel='(.*?)'.*?>}",$a,$matches)) {
echo $matches[1]; // prints i want this text here
}
?>
答案 4 :(得分:0)
正如其他海报所指出的那样:使用正则表达式进行html解析真是个坏主意,很多事情都可能出错,你需要做更多的支持。 (见Pekka的评论!)
为了在这里添加一些值,我提供了获取每个rel属性的完整示例:
<?php
$html = "<a href='#' rel='i want this text here'></a>";
$dom = new DomDocument();
$dom->loadHtml($html);
$xpath = new DomXPath($dom);
$refAttributes = $xpath->query("//a[@rel]");
// ^^ This means: Get my every <a...></a> that has a rel attribute
foreach($refAttributes as $refAtt) {
var_dump($refAtt->getAttribute("rel"));
}
如需额外阅读,可以尝试:
http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html
http://kore-nordmann.de/blog/0081_parse_html_extract_data_from_html.html