首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于从HTML中获取关键字的RegEx

用于从HTML中获取关键字的RegEx
EN

Stack Overflow用户
提问于 2009-11-15 23:45:25
回答 7查看 1.7K关注 0票数 1

我试图从一个用PHP抓取的HTML页面中获取关键字。

因此,如果关键字标记看起来像这样:

代码语言:javascript
复制
<meta name="Keywords" content="MacUpdate, Mac Software, Macintosh Software, Mac Games, Macintosh Games, Apple, Macintosh, Software, iphone, ipod, Games, Demos, Shareware, Freeware, MP3, audio, sound, macster, napster, macintel, universal binary">

我想要找回这个:

代码语言:javascript
复制
MacUpdate, Mac Software, Macintosh Software, Mac Games, Macintosh Games, Apple, Macintosh, Software, iphone, ipod, Games, Demos, Shareware, Freeware, MP3, audio, sound, macster, napster, macintel, universal binary

我构造了一个正则表达式,但它不起作用。

代码语言:javascript
复制
(?i)^(<meta name=\"keywords\" content=\"(.*)\">)

有什么想法吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-11-16 00:14:38

使用函数get_meta_tags();

Tutorial

票数 2
EN

Stack Overflow用户

发布于 2009-11-16 00:16:00

我会使用像DOMDocument和XPath这样的解析器从DOM中检索节点:

代码语言:javascript
复制
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$keywords = $xpath->query('//meta[translate(normalize-space(@name), "KEYWORDS", "keywords")="keywords"]/@content');
foreach ($keywords as $keyword) {
    echo $keyword->value;
}

translate function似乎是必要的,因为PHP的XPath实现不知道lower-case function

或者使用PHP进行过滤:

代码语言:javascript
复制
$metas = $xpath->query('//meta');
foreach ($metas as $meta) {
    if ($meta->hasAttribute("name") && trim(strtolower($meta->getAttribute("name")))=='keywords' && $meta->hasAttribute("content")) {
        echo $meta->getAttribute("content")->value;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-11-07 04:17:50

停止使用正则表达式。它很慢,资源密集,而且不是很灵活。

如果您正在使用PHP编程,请查看http://simplehtmldom.sourceforge.net/ - SimpleDom的强大功能,它能够以一种非常简单的面向对象的方式为您提供所需的一切。

代码语言:javascript
复制
    // Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images 
foreach($html->find('img') as $element) 
       echo $element->src . '<br>';

// Find all links 
foreach($html->find('a') as $element) 
       echo $element->href . '<br>';

另一个例子-

代码语言:javascript
复制
// Example
$html = str_get_html("<div>foo <b>bar</b></div>"); 
$e = $html->find("div", 0);

echo $e->tag; // Returns: " div"
echo $e->outertext; // Returns: " <div>foo <b>bar</b></div>"
echo $e->innertext; // Returns: " foo <b>bar</b>"
echo $e->plaintext; // Returns: " foo bar"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1737881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档