加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何组合这两种正则表达式模式?

发布时间:2020-12-14 06:07:36 所属栏目:百科 来源:网络整理
导读:我不得不问这个问题感觉很傻,但我不能让这个来拯救我的生命…… 什么有用 preg_replace( '/([^]+) onmouSEOut=".*?"/i','$1',preg_replace( '/([^]+) onmouSEOver=".*?"/i',$strHtml ) ) 如何将这两个preg_replace函数合并为一个(通过梳理两个正则表达式模式
我不得不问这个问题感觉很傻,但我不能让这个来拯救我的生命……

什么有用

preg_replace( '/(<[^>]+) onmouSEOut=".*?"/i','$1',preg_replace( '/(<[^>]+) onmouSEOver=".*?"/i',$strHtml ) )

如何将这两个preg_replace函数合并为一个(通过梳理两个正则表达式模式?

我的尝试清理(不起作用)

preg_replace( '/(<[^>]+) (onmouSEOver|onmouSEOut)=".*?"/i',$strHtml )

我希望这个preg_replace()函数从我的HTML字符串中删除所有onmouSEOver AND onmouSEOut属性.它似乎只删除了两个属性中的一个……我做错了什么?

更新:示例字符串

<p><img src="http://www.bestlinknetware.com/products/204233spc.jpg" width="680" height="365"><br>   <a href="http://www.bestlinknetware.com/products/204233INST.pdf" target="_blank" onmouSEOver="MM_swapImage('Image2','','/Content/bimages/ins2.gif',1)" onmouSEOut="MM_swapImgRestore()"><img name="Image2" border="0" src="http://www.bestlinknetware.com/Content/bimages/ins1.gif"></a> </p> <p><strong>No contract / No subscription / No monthy fee<br> 1080p HDTV reception<br> 32db high gain reception<br> Rotor let you change direction of the antenna to find best reception</strong></p>  <a href=http://transition.fcc.gov/mb/engineering/dtvmaps/  target="blank"><strong>CLICK HERE</strong></a><br>to see HDTV channels available in your area.<br> <br/> ** TV signal reception is immensely affected by the conditions such as antenna height,terrain,distance from broadcasting transmission antenna and output power of transmitter. Channels you can watch may vary depending on these conditions. <br> <br/> <br/> <p>* Reception: VHF/UHF/FM<br/>   * Reception range: 120miles<br/>   * Built-in 360 degree motor rotor<br>   * Wireless remote controller for rotor (included)<br/>   * Dual TV Outputs<br>   * Easy Installation<br>   * High Sensitivity Reception<br>   * Built-in Super Low Noise Amplifier<br>   * Power : AC15V 300mA<br> <br/> Kit contents<br/> * One - HDTV Yagi antenna with built-in roter & amplifier<br/> * One - Roter control box<br/> * One - Remote for roter control box<br/> * One - 40Ft coax cable<br/> * One - 4Ft coax cable<br/> * One - power supply for roter control box</p>

更新:此线程的未来视图的工具

https://regex101.com/

我永远无法弄清楚如何使用http://regexr.com/,所以我尝试了这个regex101.com网站,从那以后我一直很喜欢它.强烈建议任何面临类似问题的人(使用像我原来那样的剪切和粘贴正则表达式模式……).

解决方法

原始表达式的问题在于初始组占用太多,因此被替换的两个中唯一一个是出现在线上的最后一个.之所以发生这种情况,是因为贪婪的[^>]重复占据了搜索字符串的大部分而不是您预期的,捕获从第一个所需匹配开始到您想要摆脱的开始第二个属性的所有内容.
然后将模式锚定到html标记的起始括号也会阻止元素内的多个匹配,即使在解决该问题之后也是如此.

如果你想在一次调用preg_replace()时这样做,那么不是试图抓住你想要保留的文本,而是寻找要删除的文本(通过用空字符串替换)更有意义:

preg_replace( '/(onmouSEOver|onmouSEOut)=".*?"/i',$strHtml )

您已经对属性值(使用.*?)进行了非贪婪的匹配,并且根据您之前的代码,它似乎已经适合您.请注意,此特定表达式并未涵盖HTML / XML文档中的所有可能变体(例如,空格和引号).我相信您可以根据自己的需要判断是否足够通用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读