如何使用正则表达式静态HTML代码(PHP)

时间:2012-04-23 16:08:00

标签: php regex

我是Regualr Expressions的新手,我还没有掌握它。

我使用CURL和PHP从给定网页抓取了html内容。此网页从不更改其结构。页面上的结果取决于搜索功能,但html标签始终相同。我需要从页面中获取结果数据,具体取决于输入的搜索条件。

我需要的数据是:

<h1 class="location_only">(555) 555-5555 is a Landline</h1>

所以我需要抓住其中的任何东西

<h1 class="location_only"></h1>

如果我有$data,这是生成的HTML,我该如何将其放入正则表达式并回显我找到的$result数据?

5 个答案:

答案 0 :(得分:2)

Please do not use regular expressions to parse HTML.

请使用HTML解析器,例如Simple HTML DOM Parser。您的问题可能看似本地化,但事实并非如此。即使是这样,这种类型的问题也会在以后的范围内扩大,即使你可以使用正则表达式,也会引起很大的麻烦。

答案 1 :(得分:1)

您可以使用此搜索模式在标签之间选择文字:

<span id="result1">(.*?)</span>

如果您的代码为<span id="result1">(555) 555-5555 is a Landline</span>,则

捕获群组返回“(555)555-5555为固定电话”。

有关如何回显结果的详细信息,请参阅preg_match()

另请参阅其他人建议的HTML DOM Parser。也许我根本不应该回答......

答案 2 :(得分:0)

您无法使用正则表达式从HTML中可靠地提取信息。但是,您可以使用HTML解析器,例如DOMDocument::LoadHTML。这将从字符串中获取HTML,然后您可以使用getElementByIdgetElementByTagName等函数来查找您的值。还有其他HTML解析器。

答案 3 :(得分:0)

两个答案告诉你不要使用正则表达式而是使用DOM解析器是正确的,但是,如果页面的结构没有改变,快速&amp;鉴于您已经完全放置了起点和终点以供参考,脏的正则表达式会很好地完成这个技巧。

答案 4 :(得分:0)

您已经被警告不使用正则表达式来解析HTML 。所以这是一个基于DOM解析器的代码来提取你的值:

$html = <<< EOF
<html>
<head>
<title>Some Title</title>
</head>
<body>
<H1 class="location_only">(555) 555-5555 is a Landline</H1>
</body>
</html>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$value = $xpath->evaluate("string(//h1[@class='location_only']/text())"); 
echo "Your H1 Value=[$value]\n"; // prints text between <h1> and </h1>

<强>输出:

Your H1 Value=[(555) 555-5555 is a Landline]