为什么Regex会取代删除报价?
我正在尝试清理HTML标记,例如turn为什么Regex会取代删除报价?,regex,eclipse,Regex,Eclipse,我正在尝试清理HTML标记,例如turn <input type="image" name="name" src="image.png"> 转换为正确的空元素形式 <input type="image" name="name" src="image.png" /> 在末尾加一个斜杠 我使用Eclipse的Find/Replace和如下正则表达式: 查找: 替换为: 但我最终还是 <input type="image" name="name" src
<input type="image" name="name" src="image.png">
转换为正确的空元素形式
<input type="image" name="name" src="image.png" />
在末尾加一个斜杠
我使用Eclipse的Find/Replace和如下正则表达式:
查找:
替换为:
但我最终还是
<input type="image" name="name" src="image.png />
术语[^/]
正在使用报价。将其移动到捕获的组中:
Find: <(input .*[^/])>
Replace: <\1 />
查找:
替换:
错误在您的正则表达式中。末尾的[^/]
捕获最后一个非
字符\1
表示第一个捕获组,它将是(输入。*)
。简而言之,除了最后一个字符外,您将获得标记内的所有内容。如果您将[^\]
放入您的组中,您的替换应该可以工作
此外,如果某个属性值内有/
,则可能会遇到问题出于性能原因,我建议使用以下正则表达式:
在这种情况下,如果您的一个属性中有一个/
,则它不必回溯。您的正则表达式应该捕获您需要的所有内容。如果他在Eclipse中执行find replace,那么“性能原因”很可能是无关紧要的。这是非常正确的,尽管像我建议的那样简单的调整通常是个好主意。在Eclipse中编写find replace正则表达式时您练习的正则表达式技能与在应用程序中编写正则表达式字符串时使用的正则表达式技能相同。此外,根据用户正在搜索的文件数量,这可能会对操作所需的时间产生明显的影响。我主要想指出,我的原始语句不正确(我保留了它,但用删除线标记),但我仍然建议使用替代正则表达式。乍一看,我认为他的声明不会捕捉到这些场景,但贪婪的*
会很好地工作。我不知道[^/]捕捉到了一个角色。我假设。*捕获尽可能多的内容,包括最后一个报价,不留下任何内容供[^/]捕获。*
将尽可能多地消耗,但如果这意味着找不到匹配项,则不会继续消耗。换句话说,它将在保持匹配的同时消耗尽可能多的能量。如果在同一行上有多个
标记,您可能应该使用*?
(不情愿)而不是*
(贪婪)。如果您这样做,*
将从第一个标记的开始一直消耗到第二个标记的结束,而不是您想要的。相反,*?
将在实现匹配的同时消耗尽可能少的能量。