[英]Need regular expression to remove /> between two HTML markup tags except img tag
我需要一些幫助來制作一個正則表達式,它在兩個HTML標記標記之間刪除/>。
<!-- The line could look like this -->
<td align=right valign=bottom nowrap><div>January 24, 2013 /></div></td>
<!-- Or this -->
<div>Is this system supported? /></div>
<!-- Even this -->
<span>This is a span tag /></div>
<!-- It could look like any of these but I do not want /> removed -->
<img src="example.com/example.jpg"/></img>
<img src="example.com/example.jpg"/>
<img src="example.com/example.jpg"/></img>
<div id="example"><img src="example.com/example.jpg"/></div>
(是的,我意識到img標簽沒有與之關聯的結束標簽。我正在動態編輯我沒有創建的無數頁面;它不是我的標記。)
這是我想出的正則表達式(使用perl):
s|(<.*?>(?!<img).*?)(\s*/>)(?!</img>)(</.*?>)|$1$3|gi;
有更好的正則表達式更高效還是更快?
將正則表達式應用於上述示例后,結果如下:
<!-- The line could look like this -->
<td align=right valign=bottom nowrap><div>January 24, 2013></div></td>
<!-- Or this -->
<div>Is this system supported?></div>
<!-- Even this -->
<span>This is a span tag></div>
<!-- It could look like any of these but I do not want /> removed -->
<img src="example.com/example.jpg"/></img>
<img src="example.com/example.jpg"/>
<img src="example.com/example.jpg"/></img>
<div id="example"><img src="example.com/example.jpg"/></div>
更短的解決方案是:
s/(<[^>]*>[^<]*)\/>/$1/g
它將開始標記和可能跟隨的內容分組,不包括開口角括號 - 這將指示另一個標記。 然后它尋找/>
。 如果找到,則使用替換來刪除它。
更新:問題擴展到在/>
之前刪除可能的空格。 這可以通過使[^<]*
部分“懶惰”來完成,如下所示:
s/(<[^>]*>[^<]*?)\s*\/>/$1/g
在regex101上查看自己(鏈接已更新)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.