保持正则表达式搜索到一行

时间:2013-02-07 20:34:21

标签: regex

我使用Wget来抓取一个站点以迁移到新平台。我正在尝试清理页面并删除其中的所有视图状态代码。我使用以下正则表达式来执行此操作:

<input type="hidden" name="__VIEWSTATE" value=.*/>

这适用于Dreamweaver等程序。我喜欢使用另一个名为Wild Edit的应用程序,它非常快速地搜索和替换大量文件。当我使用相同的表达式时,它将与页面上的最后一个/>匹配,删除很多好的代码。我也试过<input type="hidden" name="__VIEWSTATE" value=.*/>$同样的结果。

我如何约束这一点以使其保持在/&gt;

的第一场比赛

2 个答案:

答案 0 :(得分:0)

正则表达式过于贪婪。试试这个:

<input type="hidden" name="__VIEWSTATE" value=.*?/>

默认情况下,正则表达式引擎会尝试尽可能多地进行匹配。例如,正则表达式a.*z将匹配az (some other middle stuff) az作为一个大匹配,因为, a开头并以{{1}结尾}。

z修饰符告诉正则表达式引擎,而不是贪婪,是懒惰的:而不是抓住最大的可能匹配,抓住最小 。在上一个示例中,正则表达式?将匹配2个a.*?z子字符串,因为它是懒惰的:一旦看到az,它就会停止。

答案 1 :(得分:0)

尝试

<input type="hidden" name="__VIEWSTATE" value=.*?/>

?,如果支持则会使搜索无效,因此它只会匹配第一个 />而不是最后一个。

如果这不起作用,最好的选择可能是:

<input type="hidden" name="__VIEWSTATE" value=[^/]+/>