为什么Regex Replace会删除报价?

时间:2014-02-06 12:50:22

标签: regex eclipse

我正在尝试清理HTML标记,例如转

 <input type="image" name="name" src="image.png">

进入正确的空元素形式

 <input type="image" name="name" src="image.png" />

最后带有斜杠

我正在使用Eclipse的Find / Replace和正则表达式:

查找: &lt;(输入。*)[^ /]&gt;

替换为: &lt; \ 1 /&gt;

但我最终还是

 <input type="image" name="name" src="image.png />

即。缺少最后一句话。

这是我的正则表达式中的错误,还是Eclipse中的错误?

2 个答案:

答案 0 :(得分:1)

术语[^/]正在消耗报价。将其移动到捕获的组中:

Find: <(input .*[^/])>

Replace: <\1 />

答案 1 :(得分:1)

错误在你的正则表达式中。最后的[^/]会捕获最后一个非>字符。 \1代表第一个捕获组,即(input.*)。简而言之,除了最后一个字符外,您将获得标记内的所有内容。如果您将[^\]放入群组中,则替换应该有效。

此外,如果您的某个属性值中包含/,则可能会遇到问题。 出于性能原因,我建议您使用以下正则表达式:

<(input [^/]*(/[^/]*)*)>

在这种情况下,如果您的某个属性中包含/,则不必回溯。你的正则表达式应该捕获你需要的一切。