【发布时间】:2016-05-09 06:39:22
【问题描述】:
我在为没有 /> 结束标记的特定 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 行中,正则表达式继续通过正确关闭的 IMG 标记并找到 DIV 标记的结束标记。我在圈子里试验了前瞻/后视等等,但想不出更好的办法。
所以虽然我有一个可行的解决方案,但我很想知道是否有更优雅的方法来做到这一点,不需要在否定字符类中使用 a-z。
【问题讨论】:
-
您是否考虑过使用合适的 HTML 解析器?他们倾向于处理不符合 XHTML 的事情,比如
<img>就好了。 -
以“You can't parse [X]HTML with regex”结尾的线程可能重复。
-
看起来
(<img)(.*?)([^[a-z\/])(\>)根本不起作用,因为[^[a-z\/]有一个无与伦比的[ -
我完全预料到了旧的“你不能用 REGEX 解析 HTML”的东西。但我真的不相信我在解析 HTML,只是在寻找特定的文本模式。这似乎与大量 REGEX 打印和在线资源一致,这些资源总是包含使用 REGEX 查找和替换特定 HTML 模式的示例......
-
@mgamba 他不想同时匹配两者,只匹配未正确关闭的那个
标签: regex