我正在尝试匹配:
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>
AND
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
我正在使用:
regex = new Regex(@"\<script(.*)type=(.*)text/javascript(.*)\>(.*)\/\/\<\!\[CDATA\[(?<text>(.*))\/\/\]\]\>(.*)\<\/script\>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match match in regex.Matches(html))
{
}
但它只找到第一场比赛。它找不到第二个。不能为我的生活看到原因吗?
答案 0 :(得分:0)
正则表达式在第6组太贪心了, (。*) \&lt; \ / script \&gt; *。我向所有(.*)
组添加了惰性行为,这是一个固定的正则表达式:
(?s)\<script(.*?)type=(.*?)text/javascript(.*?)\>(.*?)\/\/\<\!\[CDATA\[(?<text>(.*?))\/\/\]\]\>(.*?)\<\/script\>
因此,如果您在连接的输入上运行正则表达式,您将获得2个匹配项,并且您的CDATA将位于.Groups[5].Value
。