查找具有格式不佳的结束标记的特定HTML标记

RBV*_*RBV 3 regex

我在修改没有/>结束标记的特定XHTML标记(在此示例中为IMG标记)中进行REGEX查找/替换时遇到问题.

考虑这两行示例文本:

<div id="newdocs-logo"><img src="../../../_DOC_DEPT/common/logo-white-250w.gif" alt="CloudPassage logo" height="38" width="251" /></div> 

<p class="newdocs-indent"><img src="CSM/config-scanning.png" width="692" height="359"></p>
Run Code Online (Sandbox Code Playgroud)

仅当我包含a-z在捕获组#3的否定字符类中时,以下REGEX才能正常工作:

(<img)(.*?)([^a-z\/])(\>)
Run Code Online (Sandbox Code Playgroud)

替换字符串:

$1$2$3/$4
Run Code Online (Sandbox Code Playgroud)

我必须a-z在字符类中包含BECAUSE,如果我不这样做,那么在示例文本的第1行中,REGEX继续经过正确关闭的IMG标记并找到DIV标记的结束标记.我已经绕过圈子试验前瞻/后方等等,但是无法想出更好的东西.

工作和非工作REGEX的例证

虽然我有一个可行的解决方案,但我很想知道是否有一种更优雅的方式来做这个a-z在否定的字符类中不需要的方法.

Lau*_*rel 5

这对于正则表达式来说实际上非常简单.像空的标签img实际上是非常规则的.

假设在img和之间至少有一个字符>,这个正则表达式将起作用:

(<img[^>]*[^\/])>
Run Code Online (Sandbox Code Playgroud)

基本上,它捕获<img,然后一切,直到最后一个字符>.如果该字符不是/,您将获得匹配,并可以使用替换字符串:$1/>.

(如果没有匹配,那么您的标签已经正确关闭.)