PHP正则表达式匹配<;车身风格=…>;及</车身>;标签
我有一个cURL函数,它获取指定页面上的所有内容,但我只需要body标记之间的元素。我发现这个漂亮的正则表达式可以匹配PHP正则表达式匹配<;车身风格=…>;及</车身>;标签,php,html,regex,curl,match,Php,Html,Regex,Curl,Match,我有一个cURL函数,它获取指定页面上的所有内容,但我只需要body标记之间的元素。我发现这个漂亮的正则表达式可以匹配和之间的所有内容,这很有效。但是后来我意识到我需要使用cURL-on的其中一个页面实际上有一个带有样式信息的body标签,因此我真正想要匹配的是和之间的所有内容。有人知道与之匹配的正则表达式吗?这是到目前为止我所有的代码 <?php error_reporting(E_ALL); ini_set("display_errors", "1"); $
和
之间的所有内容,这很有效。但是后来我意识到我需要使用cURL-on的其中一个页面实际上有一个带有样式信息的body标签,因此我真正想要匹配的是
和
之间的所有内容。有人知道与之匹配的正则表达式吗?这是到目前为止我所有的代码
<?php
error_reporting(E_ALL);
ini_set("display_errors", "1");
$pageToLoad = $_POST['load'];
function get_data($url) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt ($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$html = get_data($pageToLoad);
$newHtml = preg_match("~<body[^>]*>(.*?)</body>~si", $html, $newHtml);
print_r($newHtml);
?>
最简单的方法是使用如下正则表达式:
preg_match('|body[^>]*>(.*?)(?=\</body)|si',$html,$match);
echo $match[1];
preg_match('| body[^>]*>(*))(?=\当您尝试将属性作为搜索模式的一部分时,尝试在html中查找模式可能是一个冒险的命题。例如,属性值可以是单引号,也可以是双引号,并且大多数解析器将能够管理,即使有人忘记引用某个内容,或者引号不匹配。因为您只是在查找s指定属性名,这更简单,但仍然存在一些问题,例如,您要查找的属性名是否作为值存在于另一个属性中
(见鬼,原来的简单正则表达式会错误地匹配一些不太可能的字符串,如…
)
因为一个样式属性后面几乎总是跟一个等号,所以我将使用这个事实来查找它。我还将确保匹配一个body元素,而不是像上面示例中那样的一些不可能的变体
<body\s[^>]*style\s*=[^>]*>(.*?)</body>
]*style\s*=[^>]*>(*?)
<>这与原来的正则表达式基本相同,但是在<>代码[>[s^ >] *样式s*= >中间。
\s
确保主体元素后面有空格,因此它只能是主体元素
[^>]*
匹配除
以外的任何字符0次或更多次
style
与字符串“style”匹配
\s*
允许在样式和等号之间使用空格
=
匹配字符串“=”
我很难想象有一个例子会让这个正则表达式变得混乱,这也不会导致解析器出现问题。我想如果有人在之间添加空格,你真的应该使用HTML解析器,因为这正是它们构建的目的。很棒的post@Quentin,mames me认为正则表达式适用于这种情况。我想y喜欢这句话:要求正则表达式被认为是很好的形式,完全禁止处理HTML,但我认为这和要求每个琐碎的HTML处理任务都由一个成熟的解析引擎来处理一样是错误的。更重要的是要了解这些工具及其优缺点esses,这比屈服于下意识的教条主义更重要。@user3121091你的意思是你只想要具有样式属性的元素吗?所以sadsad很好,但不能与asdsa匹配?@Daniel Gimenez--没错。是的!太完美了。谢谢你的帮助!