Я пытаюсь сопоставить:
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>
А ТАКЖЕ
<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))
{
}
но он находит только первый матч. Он не находит второго. Разве я не могу понять, почему?
Регулярное выражение слишком жадно в 6-й группе, (. *)\<\/Script \> *. Я добавил ленивое поведение ко всем (.*)
Группам, и вот фиксированное регулярное выражение:
(?s)\<script(.*?)type=(.*?)text/javascript(.*?)\>(.*?)\/\/\<\!\[CDATA\[(?<text>(.*?))\/\/\]\]\>(.*?)\<\/script\>
Итак, если вы запустите регулярное выражение на своих конкатенированных входах, вы получите 2 совпадения, и ваш CDATA будет в .Groups[5].Value
.
?
незадолго до<text>
RegexOptions.Singleline
должен исправить любые проблемы сRegexOptions.Singleline
, не могли бы вы удалить все новые строки из вашего второго примера и проверить, соответствует ли ваш код впоследствии?