PHP正则匹配html标签
一、前言
1、匹配字符串时用:.*? 或 [^\<]+\ 或 [^\<]+
2、preg_match匹配结果为1个,preg_match_all匹配结果为多个
3、如果有标签结束,则要加符号\,例如<\/div>,如果只需要匹配标签里的属性,就不需要匹配标签的结束符号<\/标签名>
4、preg_match_all匹配多个时,每一个()里对应一个结果数组,默认匹配返回所有内容,preg_match_all返回的数组数量 = 1 + ()的个数
5、相关文章 正则表达式 – php正则匹配内容?https://www.php.cn/php-weizijiaocheng-285574.html
二、小例子
1、需求:获取下面字符串中EAT的内容
NAME=姓名;AGE=99;EAT=APPLE;TIME=1234567890
2、实现
//获取下面字符串中EAT的值
$string = 'NAME=姓名;AGE=99;EAT=APPLE;TIME=1234567890';
$pattern = '/EAT=([^;]+)/'; //从EAT= 开始匹配 匹配到非;(^;)结束(即匹配到第一个分号结束)
preg_match_all($pattern, $string, $result);
var_export($result);die;
3、打印
array (
0 =>
array (
0 => 'EAT=APPLE',
),
1 =>
array (
0 => 'APPLE',
),
)
4、匹配语句解析
从EAT= 开始匹配 匹配到非;(^;)结束(即匹配到第一个分号结束)
三、代码
<?php
namespace app\index\controller;
class Ablog extends Base
{
public function test4(){
//获取Html字符串
$html = $this->getHtml();
//打印标题
$this->searchTitle($html);
//打印内容
$this->searchContent($html);
}
public function searchContent($html){
// $pattern1 = '/<div class="info" id=".*?">[^\"]+<\/div>/';
$pattern1 = '/<div class="info" id=".*?">[^\<]+\<\/div>/';
// $pattern2 = '/<div class="info" id="(.*?)">([^\"]+)<\/div>/';
$pattern2 = '/<div class="info" id="(.*?)">([^\<]+)<\/div>/';
preg_match($pattern1, $html, $matches1One); //匹配单个
preg_match_all($pattern1, $html, $matches1More); //匹配多个
var_export($matches1One);
<<<EOF
matches1One:打印
array (
0 => '<div class="info" id="96">
回来的时候换了一条路。那里进过广场的公园。一如既往的有好多手机贴膜的小贩还有只有一个板凳面前一张纸卖电话卡的小贩。
</div>',
)
EOF;
var_export($matches1More);
<<<EOF
matches1More:打印
array (
0 =>
array (
0 => '<div class="info" id="96">
回来的时候换了一条路。那里进过广场的公园。一如既往的有好多手机贴膜的小贩还有只有一个板凳面前一张纸卖电话卡的小贩。
</div>',
1 => '<div class="info" id="97">
我看见石榴花开了,红的黄的真的特别的好看。月季依然开得很娇艳。
</div>',
),
)
EOF;
preg_match($pattern2, $html, $matches2One); //匹配所有
preg_match_all($pattern2, $html, $matches2More); //匹配所有
var_export($matches2One);
<<<EOF
matches2One:打印
array (
0 => '<div class="info" id="96">
回来的时候换了一条路。那里进过广场的公园。一如既往的有好多手机贴膜的小贩还有只有一个板凳面前一张纸卖电话卡的小贩。
</div>',
1 => '96',
2 => '
回来的时候换了一条路。那里进过广场的公园。一如既往的有好多手机贴膜的小贩还有只有一个板凳面前一张纸卖电话卡的小贩。
',
)
EOF;
var_export($matches2More);
<<<EOF
matches2More:打印
array (
0 =>
array (
0 => '<div class="info" id="96">
回来的时候换了一条路。那里进过广场的公园。一如既往的有好多手机贴膜的小贩还有只有一个板凳面前一张纸卖电话卡的小贩。
</div>',
1 => '<div class="info" id="97">
我看见石榴花开了,红的黄的真的特别的好看。月季依然开得很娇艳。
</div>',
),
1 =>
array (
0 => '96',
1 => '97',
),
2 =>
array (
0 => '
回来的时候换了一条路。那里进过广场的公园。一如既往的有好多手机贴膜的小贩还有只有一个板凳面前一张纸卖电话卡的小贩。
',
1 => '
我看见石榴花开了,红的黄的真的特别的好看。月季依然开得很娇艳。
',
),
)
EOF;
}
public function searchTitle($html){
$titlePattern1 = '/<h2>.*?<\/h2>/'; //匹配:(h2标签 + 标签里的内容)
$titlePattern2 = '/<h2>(.*?)<\/h2>/';//匹配:(h2标签 + 标签里的内容)和 (h2标签里的内容)
//titlePattern1
preg_match($titlePattern1, $html, $titleMatches1One); //匹配单个
preg_match_all($titlePattern1, $html, $titleMatches1More); //匹配多个
var_export($titleMatches1One);
<<<EOF
titleMatches1One:打印
array (
0 => '<h2>美好的一天</h2>',
)
EOF;
var_export($titleMatches1More);
<<<EOF
titleMatches1More:打印
array (
0 =>
array (
0 => '<h2>美好的一天</h2>',
),
)
EOF;
//titlePattern2
preg_match($titlePattern2, $html, $titleMatches2One); //匹配单个
preg_match_all($titlePattern2, $html, $titleMatches2More); //匹配多个
var_export($titleMatches2One);
<<<EOF
titleMatches2One:打印
array (
0 => '<h2>美好的一天</h2>',
1 => '美好的一天',
)
EOF;
var_export($titleMatches2More);
<<<EOF
titleMatches2More:打印
array (
0 =>
array (
0 => '<h2>美好的一天</h2>',
),
1 =>
array (
0 => '美好的一天',
),
)
EOF;
}
public function getHtml(){
$html = '<html>
<head>
<title>大家好</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<!-- 文章START -->
<div class="whole">
<!-- 标题START -->
<div class="head">
<h2>美好的一天</h2>
<div>
<span>御风剑士</span>
<span>2019-04-24</span>
</div>
</div>
<!-- 标题SEND -->
<!-- 内容START -->
<div class="content">
<a href="http://www.***.com">
<img src="http://images.***.com"/>
</a>
<div class="info" id="96">
回来的时候换了一条路。那里进过广场的公园。一如既往的有好多手机贴膜的小贩还有只有一个板凳面前一张纸卖电话卡的小贩。
</div>
<div class="info" id="97">
我看见石榴花开了,红的黄的真的特别的好看。月季依然开得很娇艳。
</div>
</div>
<!-- 内容END -->
</div>
<!-- 文章END -->
</body>
</html>';
return $html;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34388.html