【正则】匹配头尾,并且中间不能有特定字符串


缘由:

  开发Flex时调用到SWC文件的类库,想通过注释catalog.xml的script标签来屏蔽一部分类包,然后自己重写。但是由于标签过多,手动注释只会累死人,只能用正则替换来注释script标签。

替换内容:

<script name="com\error......>

  <dep ....../>

  <dep ....../>

</script>
 

<script name="com\warn......>

  <dep ....../>

  <dep ....../>

</script>

<script name="com\error......>

  <dep ....../>

  <dep ....../>

</script>

匹配逻辑:

  1.以<script开头

  2.以</script>结尾

  3.中间必须包含name="com\error字串

  4.中间不包含字串script


正确正则表达式:
<(script)( name="com)(/error)(\b((?!\1).*?)+\b)(.*?)(</\1>)
正则不解释了,匹配逻辑有所不同的请自行分析参考。

正确替换内容:
<!--<$1$2$3$6$7-->


正确替换结果:
<!--<script name="com\error......>

  <dep ....../>

  <dep ....../>

</script>-->

 

<script name="com\warn......>

  <dep ....../>

  <dep ....../>

</script>



<!--<script name="com\error......>

  <dep ....../>

  <dep ....../>

</script>-->


之前我在网上找到很多的正则,都是有问题的。
错误替换结果:
<!--<script name="com\error......>

  <dep ....../>

  <dep ....../>

</script>
 

<script name="com\warn......>

  <dep ....../>

  <dep ....../>

</script>


<script name="com\error......>

  <dep ....../>

  <dep ....../>

</script>-->
可以看到,上面匹配时把"com\warn"的script标签也注释掉了,因为这个正则匹配的只是头尾,中间没有排除掉script标签的单词,这是贪婪模式下的匹配结果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值