重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
正则是按位解析匹配的,所以[1-32]是不行的。
成都创新互联公司主营高密网站建设的网络公司,主营网站建设方案,app开发定制,高密h5微信小程序开发搭建,高密网站营销推广欢迎高密等地区企业咨询
解析:
1、1-32,包含1位数(1-9)和2位数(10-32)
2、10-32必须切割,10-19和20-29形式一样,得到[12][0-9],30-32有3[012]
3、因此得到[1-9]|[12][0-9]|3[012]
4、考虑全匹配,因此得到/^(?:[1-9]|[12][0-9]|3[012])$/,
?:表示不捕获匹配,意思就是不保存括号数据
最终:
$pattern = '/^(?:[1-9]|[12][0-9]|3[012])$/'; //这个就是1-32的正则啦
先用正则表达式匹配tr标签内的数据,再用正则表达式匹配td标签内的数据
完整的php程序如下
?php
$str = 'tr class="text-c"td1/tdtd2/tdtd3/tdtd4/tdtd5/tdtd6/tdtd7/tdtd8 18:55/td!--设防状态--td9/td!--围栏状态--td10/tdtd class="td-status"11/tdtd class="td-status"12/tdtd class="td-manage" style="max-width: 300px;"13/td/tr';
preg_match_all ('/tr class="text-c"(.+?)\/tr/im', $str, $result);
for ($i=0; $icount($result[1]); $i++) {
$s=$result[1][$i];
preg_match_all ('/td.*?(.+?)\/td/im', $s, $matches);
for ($j=0; $jcount($matches[1]); $j++) {
echo $matches[1][$j]."br";
}
}
?
用file方法获得的数组元素是包含行结束符(换行符)的,所以直接比对的话肯定是不匹配的。可以用rtrim()函数把行结束符去掉再来比对,但建议最好换成逐行读取文件的方式而不是直接用file函数读取到数组中
要匹配li/li中间多行数据,用正则表达式:li([\s\S]*?)\/li
取第一捕获组的数据就可以了.