我还在努力学习正则表达式,我正在考虑一个简单的查询,我正在尝试解析我的网站主页并提取H1标记。
<?php
$string_get = file_get_contents("http://davidelks.com/");
$replace = "$1";
$matches = preg_replace ("/<h1 class=\"title\"><a href=\"([A-Z]|[0-9]|[a-z]|[\s]|[\x21]|[\/]|[\-]|[\.]|[\£]|[\:])*\">([A-Z]|[0-9]|[a-z]|[\s]|[\x21]|[\/]|[\-]|[\.]|[\£]|[\:])*<\/a><\/h1>/", $replace, $string_get, 1);
$string_construct = "Mum " . $matches . " Dad";
echo ($string_construct);
?>
但是,它不是只显示使用$1标记的第一个HTML链接,而是拉入整个页面。
3条答案
按热度按时间dly7yett1#
这看起来像是可以用DOM parser轻松完成的任务:
您应该获得:
<h1>
标记不应超过一个(主页上有两个)。ycggw6v22#
错误在于您对
preg_replace
的使用。您想要提取某个东西,而preg_match
将用于该东西:特别注意你可以合并字符类,你不需要
[A-Z]|[a-z]|[..]
,因为你可以把它组合成一个[A-Za-z...]
方括号列表。如果你想搜索双引号,也可以尝试用单引号来表示PHP字符串,这样可以节省很多额外的转义,就像用
#
代替/
来表示正则表达式一样。dldeef673#
使用DOM解析器会更容易一些,但是如果你想用regex来做,你应该使用php中的preg_match_all函数: