簡體   English   中英

需要正則表達式來刪除除img標記之外的兩個HTML標記標記之間的/>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM