关于preg_match_all返回的数组

php中文网
发布: 2016-06-06 20:43:50
原创
1777人浏览过

我想用正则表达式匹配html的

标签内的
用的正则表达式是 #(.*)#

因为匹配的原文 其实就是一个有规律的表格 我想要将匹配出来的多个结果分别存入数据库中

但是返回的二维数组我不明白
我的理解是第一维的结果是正常匹配出来的结果 然后第二维是在一维的结果内再进行匹配吗 但是实际出来第一维数组和第二维数组是一样的呀

我找到一个preg_match参数
参数说明:
参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推

(o.o 类推你妹呀 看不懂呀 初学者让大家)

代码如下

<?php
// 用正则表达式 匹配 TR标签 第二个TR标签 为第一大节课  对该段标签 再去匹配td标签  结果有7个  依次为 星期一到星期天第一节课的内容
$test = "
<TBODY>
<TR bgColor=#eeeeee>
<TD width=\"9%\">
<DIV align=center> </DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期一</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期二</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期三</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期四</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期五</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期六</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期日</DIV></TD></TR>

<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>第一大节</DIV></TD>
<td valign=top align=center>11</td>

<td valign=top align=center>12</td>

<td valign=top align=center>13</td>

<td valign=top align=center>14</td>

<td valign=top align=center>15</td>

<td valign=top align=center>16</td>

<td valign=top align=center>17</td>

</TR>
<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>第二大节</DIV></TD>
<td valign=top align=center>21;</td>

<td valign=top align=center>22</td>

<td valign=top align=center>形势与政策(6)<br>第10周<br>吕志和礼堂 白文杰</td>

<td valign=top align=center>24</td>

<td valign=top align=center>25</td>

<td valign=top align=center>26</td>

<td valign=top align=center>27</td>

</TR>
<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>第三大节</DIV></TD>
<td valign=top align=center> </td>

<td valign=top align=center>英语</td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center>数学</td>

<td valign=top align=center> </td>

</TR>
<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>第四大节</DIV></TD>
<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center>音乐</td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

</TR>
<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>晚 上</DIV></TD>
<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

</TR>

<TR>

";





function trimall($str)//删除全部空格
{
    $qian=array(" "," ","\t","\n","\r");$hou=array("","","","","");
    return str_replace($qian,$hou,$str);    
}
$test = trimall($test);


$match = "#<TR>(.*)</TR>#";
preg_match_all($match,$test,$TR);
print_r($TR);

?>
登录后复制
登录后复制

回复内容:

我想用正则表达式匹配html的

标签内的
用的正则表达式是 #(.*)#

因为匹配的原文 其实就是一个有规律的表格 我想要将匹配出来的多个结果分别存入数据库中

但是返回的二维数组我不明白
我的理解是第一维的结果是正常匹配出来的结果 然后第二维是在一维的结果内再进行匹配吗 但是实际出来第一维数组和第二维数组是一样的呀

我找到一个preg_match参数
参数说明:
参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推

(o.o 类推你妹呀 看不懂呀 初学者让大家)

代码如下

<?php
// 用正则表达式 匹配 TR标签 第二个TR标签 为第一大节课  对该段标签 再去匹配td标签  结果有7个  依次为 星期一到星期天第一节课的内容
$test = "
<TBODY>
<TR bgColor=#eeeeee>
<TD width=\"9%\">
<DIV align=center> </DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期一</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期二</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期三</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期四</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期五</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期六</DIV></TD>
<TD width=\"13%\">
<DIV align=center>星期日</DIV></TD></TR>

<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>第一大节</DIV></TD>
<td valign=top align=center>11</td>

<td valign=top align=center>12</td>

<td valign=top align=center>13</td>

<td valign=top align=center>14</td>

<td valign=top align=center>15</td>

<td valign=top align=center>16</td>

<td valign=top align=center>17</td>

</TR>
<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>第二大节</DIV></TD>
<td valign=top align=center>21;</td>

<td valign=top align=center>22</td>

<td valign=top align=center>形势与政策(6)<br>第10周<br>吕志和礼堂 白文杰</td>

<td valign=top align=center>24</td>

<td valign=top align=center>25</td>

<td valign=top align=center>26</td>

<td valign=top align=center>27</td>

</TR>
<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>第三大节</DIV></TD>
<td valign=top align=center> </td>

<td valign=top align=center>英语</td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center>数学</td>

<td valign=top align=center> </td>

</TR>
<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>第四大节</DIV></TD>
<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center>音乐</td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

</TR>
<TR>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center>晚 上</DIV></TD>
<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

<td valign=top align=center> </td>

</TR>

<TR>

";





function trimall($str)//删除全部空格
{
    $qian=array(" "," ","\t","\n","\r");$hou=array("","","","","");
    return str_replace($qian,$hou,$str);    
}
$test = trimall($test);


$match = "#<TR>(.*)</TR>#";
preg_match_all($match,$test,$TR);
print_r($TR);

?>
登录后复制
登录后复制

请问你理解了这句话吗?
$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,括号指的是什么?

理解之后,我在提醒下,你的$matches[0]肯定比$matches[1]要多 TR 这个标签吧?

preg_match_all不是匹配一次就停止,而是匹配完得到所有的结果。所以$matches[0]就不是string而是array of string。然后每个匹配得到的表达式都对应一个子串,所以[1]同理。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号