我在修改没有 /> 结束标记的特定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>
只有当我在捕获组#3的否定字符类中包含a-z
时,以下REGEX才能正常工作:
(<img)(.*?)([^a-z\/])(\>)
替换字符串:
$1$2$3/$4
如果不这样做,我必须在字符类中包含a-z
,然后在示例文本的第1行中,REGEX继续经过正确关闭的IMG标记,并找到DIV标记的结束标记。我已经绕过圈子试验前瞻/后方等等,但是无法想出更好的东西。
虽然我有一个可行的解决方案,但我很想知道是否有一个更优雅的方法来做这个,在否定的字符类中不需要a-z
。
答案 0 :(得分:5)
这对于正则表达式实际上非常简单。像img
这样的空标签实际上是非常规则的。
假设img
和>
之间至少有一个字符,这个正则表达式将起作用:
(<img[^>]*[^\/])>
基本上,它会捕获<img
,然后捕获所有内容,直到>
之前的最后一个字符。如果该字符不是/
,您将获得匹配,并且可以使用替换字符串:$1/>
。
(如果没有匹配,那么您的代码已经正确关闭。)