> 백엔드 개발 > PHP 튜토리얼 > 关于preg_match_all返回的数组

关于preg_match_all返回的数组

WBOY
풀어 주다: 2016-06-06 20:43:50
원래의
1627명이 탐색했습니다.

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

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

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

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

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

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

代码如下

<code><?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>(.*)</tr>#";
preg_match_all($match,$test,$TR);
print_r($TR);

?>
</code>
로그인 후 복사
로그인 후 복사

回复内容:

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

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

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

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

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

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

代码如下

<code><?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>(.*)</tr>#";
preg_match_all($match,$test,$TR);
print_r($TR);

?>
</code>
로그인 후 복사
로그인 후 복사

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

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

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿