求高手帮我写个php正则表达式

下面两段代码,一段a标签中有span,一段里面没有,我想保存的内容有12345678910、两处¥后面的内容、以及标注的“此内容需要保存”,这些内容包括href的值都是变... 下面两段代码,一段a标签中有span,一段里面没有,我想保存的内容有12345678910、两处¥后面的内容、以及标注的“此内容需要保存”,这些内容包括href的值都是变化的,求高手帮我写一个正则表达式,要在php中使用的,源代码如下:
第①段:
<div class="numbershow">
<ul>
<li class="number hmzt"><a href="/escrow/622-12345678910.htm" target="_blank">12345678<span class="red">910</span></a></li>
<li class="price"><span class="red">¥5300</span>/¥0</li>
<li class="brand"><i class="brand_icon liantong"></i>几个汉字</li>
<li class="law" style="color:#8d8d8d;">此内容需要保存</li>
<li class="operation"><a class="reserve" href="/escrow/622-12345678910.htm" target="_blank">查看</a></li>
</ul>
</div>
第②段:
<div class="numbershow">
<ul>
<li class="number hmzt"><a href="/escrow/31863-12345678910.htm" target="_blank">12345678910</a></li>
<li class="price"><span class="red">¥5300</span>/¥0</li>
<li class="brand"><i class="brand_icon liantong"></i>几个汉字</li>
<li class="law" style="color:#8d8d8d;">此内容需要保存</li>
<li class="operation"><a class="reserve" href="/escrow/31863-12345678910.htm" target="_blank">查看</a></li>
</ul>
</div>
上面描述有误,应该是:第一段a标签里面里面有span,第二段没有
展开
 我来答
紫薇参星
科技发烧友

2018-07-27 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3547万
展开全部

按照你的要求编写的PHP正则表达式

/<div class="numbershow">.*?<li class="number hmzt".*?><a.*?>(.*?)(?:<span.*?>(.*?)<\/span>)?<\/a>.*?<li class="price".*?><span.*?>¥(.*?)<\/span>\/¥(.*?)<\/li>.*?<li class="law".*?>(.*?)<\/li>/is

完整的PHP程序如下

<?php
$str = '<div class="numbershow">
<ul>
<li class="number hmzt"><a href="/escrow/622-12345678910.htm"
target="_blank">12345678<span class="red">910</span></a></li>
<li class="price"><span class="red">¥5300</span>/¥0</li>
<li class="brand"><i class="brand_icon liantong"></i>几个汉字</li>
<li class="law" style="color:#8d8d8d;">此内容需要保存</li>
<li class="operation"><a class="reserve" href="/escrow/622-12345678910.htm"
target="_blank">查看</a></li>
</ul>
</div>
<div class="numbershow">
<ul>
<li class="number hmzt"><a href="/escrow/31863-12345678910.htm"
target="_blank">12345678910</a></li>
<li class="price"><span class="red">¥5300</span>/¥0</li>
<li class="brand"><i class="brand_icon liantong"></i>几个汉字</li>
<li class="law" style="color:#8d8d8d;">此内容需要保存</li>
<li class="operation"><a class="reserve" href="/escrow/31863-12345678910.htm"
target="_blank">查看</a></li>
</ul>
</div>';
preg_match_all ('/<div class="numbershow">.*?<li class="number hmzt".*?><a.*?>(.*?)(?:<span.*?>(.*?)<\/span>)?<\/a>.*?<li class="price".*?><span.*?>¥(.*?)<\/span>\/¥(.*?)<\/li>.*?<li class="law".*?>(.*?)<\/li>/is', $str, $matches);
for ($i=0; $i<count($matches[0]); $i++) {
 echo "number hmzt=".$matches[1][$i].$matches[2][$i]." price=".$matches[3]
[$i]." ".$matches[4][$i]." law=".$matches[5][$i]."\n";
}
?>

运行结果
number hmzt=12345678910 price=5300 0 law=此内容需要保存
number hmzt=12345678910 price=5300 0 law=此内容需要保存
折柳成萌
高粉答主

2018-07-27 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:4.4万
采纳率:96%
帮助的人:6098万
展开全部
解法一:$p = '#index\.php\?c=[^&]+&f=[^&]+((?!&p=).)*#i'; 解法二:使用(?(group)yes|no)这个语法 $p = '#index\.php\?c=[^&]+&f=[^&]+(&p=)?(?(1)|.+)$#i'; //注意后面的$ 更多关于正则内容请参考:《深入正则表达式应用》http://www.zjmainstay.cn/deep-regexp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式