Ответ 1
Вы не можете анализировать HTML с регулярными выражениями.
Используйте HTML Agility Pack.
Я пытаюсь написать регулярное выражение в С#, чтобы удалить все теги script и все, что содержалось в них.
До сих пор я придумал следующее: \<([^:]*?:)?script\>[^(\</<([^:]*?:)?script\>)]*?\</script\>
, однако это не сработает.
Я сломаю его и объясню свое мышление в каждом разделе:
\<([^:]*?:)?script\>
Здесь я пытаюсь указать, что он должен получить любой элемент script, даже если он имеет префикс пространства имен, скажем, <a:script></a:script>.
. Я также добавил это к закрывающему тегу.
[^(\</<([^:]*?:)?script\>)]*?
Здесь я пытаюсь утверждать, что он должен допускать, чтобы что-либо содержалось в тегах, кроме </a:script>
, </script>
и т.д.
\</script\>
Здесь я утверждаю, что он должен иметь закрывающий тег.
Может ли кто-нибудь определить, где я ошибаюсь?
Вы не можете анализировать HTML с регулярными выражениями.
Используйте HTML Agility Pack.
Это регулярное выражение делает трюк просто прекрасным:
\<(?:[^:]+:)?script\>.*?\<\/(?:[^:]+:)?script\>
У вас возникнет проблема с помощью этого простого HTML:
<script>
var s = "<script></script>";
</script>
Как вы собираетесь решить эту проблему? Разумеется использовать HTML Agility Pack для таких вещей.