我是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
数据?
答案 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,然后您可以使用getElementById或getElementByTagName等函数来查找您的值。还有其他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]