正则提取PHP代码里的部分数据

前两天一个网友在群里问用正则如何把

<if condition="张三 == 张三">是张三</if> <if condition="11>1">测试成功</if></td>
		<td>
			<if condition="1 > 0">
			男
			<else>
			女
			</if>

提取<if></if>中间没有<else>的代码

因为本人很久没写代码了,所以下载安装了RegexBuddy 作为正则调试工具,立马找网页看了下正则参考手册委屈 是在是痛苦啊,好久没写都忘记了,接下来就是花了10多分钟看


后来写上

<if condition="(.*)">([^<else>]*)<\/if>
发现测试成功,因为好久没写的缘故,其实是错误的,因为测试器全部标黄了 我以为是可以了,其实是全部匹配到了最后,这个接下来解释

后来我就大胆的告诉他们可以了,群里那小伙测试一下不行啊,怎么匹配截断了一部分,这时候冒出一家伙 说你那是理论,具体行不行还需要调试,然后各种喷,还发了自己的东西上来,先替换<else>什么的,搞得和php模板替换一样的复杂,我说大哥 不要那样做,你告诉想法是对的,但是处理太复杂了(黑猫白猫抓得住耗子就是好猫,但是还是要效率)


哥都不写代码了,没测试环境,被喷也无怨言了,和那小伙说等我回家给调试,回家后刚好有篮球活动,饭都没吃立马去打(身体是革命本钱啊,虽然要言而有信,但是也不能让哥累跨了吧大笑)


然后回来我把php环境工具都copy到U盘里,早上来就开始调试

后来发现原来是(.*)把后面带"的都匹配到了,结果表现为

"张三 == 张三">是张三</if> <if condition="11>1
结果一番调试最后
<?php
$str='<if condition="张三 == 张三">是张三</if> <if condition="11>1">测试成功</if></td>
		<td>
			<if condition="1 > 0">
			男
			<else>
			女
			</if>';
preg_match_all('/<if condition="(.+?)">([^<else>]*)<\/if>/is',$str,$arry);
print_r($arry);
?>
终于没问题了


说明:如果写成

<if condition="(.*)">([^<else>]*)<\/if>
会匹配到所有condition=""直到遇到>的数据,所以上面出现了问题


第一次写 语无伦次的,请见谅

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值