Я пытаюсь использовать выражение Regex, которое я нашел в этом веб-сайте, и это, кажется, не работает. Какие-либо идеи?
Входная строка:
sFetch = "123<script type=\"text/javascript\">\n\t\tfunction utmx_section(){}function utmx(){}\n\t\t(function()})();\n\t</script>456";
Regex:
sFetch = Regex.Replace(sFetch, "<script.*?>.*?</script>", "", RegexOptions.IgnoreCase);
Это немного короче:
"<script[^<]*</script>"
или
"<[^>]*>[^>]*>"
Причина сбоя регулярного выражения заключается в том, что ваш ввод содержит символы новой строки
и мета-символ .
не соответствует.
Чтобы решить эту проблему, вы можете использовать параметр RegexOptions.Singleline
, как говорит С.Марк, или вы можете изменить регулярное выражение на:
"<script[\d\D]*?>[\d\D]*?</script>"
, которое использовало [\ d \ D]
вместо .
.
\ d
- это любая цифра, а \ D
- любая нецифровая цифра, поэтому [\ d \ D]
является цифрой или нецифровой цифрой, что эффективно любой символ.
Добавьте RegexOptions.Singleline
RegexOptions.IgnoreCase | RegexOptions.Singleline
И это никогда не сработает с последующим.
<script
>
alert(1)
</script
/**/
>
Итак, найдите парсер HTML, например HTML Agility Pack