C# 正则表达式捕获html中的多行脚本标记

C# 正则表达式捕获html中的多行脚本标记,c#,html,regex,tags,C#,Html,Regex,Tags,我需要抓取html页面中的内联脚本标记。 正则表达式最终将由c#驱动。 现在我使用Expresso进行测试 以下是目前最好的: .*<script.*\r\n(.*\r\n)*\s*</script> *启用“点匹配全部”并使用一些简单的方法如何: <script\b[^>]*>(.*?)</script> ]*>(**?) 请记住,匹配与捕获不同。这应该捕获标签之间的内容(1美元)。我用电脑做了一个快速测试 在Eclipse中使用bosin

我需要抓取html页面中的内联脚本标记。 正则表达式最终将由c#驱动。 现在我使用Expresso进行测试

以下是目前最好的:

.*<script.*\r\n(.*\r\n)*\s*</script>
*启用“点匹配全部”并使用一些简单的方法如何:

<script\b[^>]*>(.*?)</script>
]*>(**?)
请记住,匹配与捕获不同。这应该捕获标签之间的内容(1美元)。我用电脑做了一个快速测试

在Eclipse中使用bosinski.com/regex(我知道它不是C#),下面是我的测试文件(后面是结果):


这是第二组代码
正则表达式匹配的结果:

找到2个匹配项:
开始=8,结束=275
组(0)=
第(1)组=
开始=277,结束=344
组(0)=
这是第二组代码
第(1)组=
这是第二组代码
启用“点匹配全部”并使用一些简单的方法如何:

<script\b[^>]*>(.*?)</script>
]*>(**?)
请记住,匹配与捕获不同。这应该捕获标签之间的内容(1美元)。我用电脑做了一个快速测试

在Eclipse中使用bosinski.com/regex(我知道它不是C#),下面是我的测试文件(后面是结果):


这是第二组代码
正则表达式匹配的结果:

找到2个匹配项:
开始=8,结束=275
组(0)=
第(1)组=
开始=277,结束=344
组(0)=
这是第二组代码
第(1)组=
这是第二组代码

根据您询问的对象,您会遇到不同的问题。要么你的问题是,你在html上使用正则表达式,要么你的量词太贪婪

我不知道您想要解决的问题,但很有可能,您的解决方案应该是使用html解析器

如果你想坚持使用正则表达式,那么就使用不加密的量词版本
*?
。你的正则表达式看起来像这样

.*<script.*\r\n(.*\r\n)*?\s*</script>

*根据你问的人,你会遇到不同的问题。要么你的问题是,你在html上使用正则表达式,要么你的量词太贪婪

我不知道您想要解决的问题,但很有可能,您的解决方案应该是使用html解析器

如果你想坚持使用正则表达式,那么就使用不加密的量词版本
*?
。你的正则表达式看起来像这样

.*<script.*\r\n(.*\r\n)*?\s*</script>

*同一行上的两个脚本将破坏您的正则表达式。在你的问题所在的页面上尝试一下

用正则表达式解析HTML不是一个很好的主意(注释中有一个链接指向您的问题,为什么
无法保存该链接);改用HTML解析器

下一个代码段使用以下命令选择
节点:


这不是比正则表达式更简单吗?

同一行上的两个脚本会破坏正则表达式。在你的问题所在的页面上尝试一下

用正则表达式解析HTML不是一个很好的主意(注释中有一个链接指向您的问题,为什么
无法保存该链接);改用HTML解析器

下一个代码段使用以下命令选择
节点:

这不是比正则表达式更简单吗?

]*>(?*?)
之后的单词
替换为另一个元素名称,您也可以将其用于其他元素名称。

]*>(?*?)

之后的单词
替换为另一个元素名,您也可以将其用于其他元素名。

您在用正则表达式解析HTML时遇到问题!如果你打算在C#中使用这个,试试@CanSpice——我想这篇文章的流行会结束“Can I regex my HTML”问题。悲哀的是:没有。回头看,我发现了这个。你在用正则表达式解析HTML时遇到了问题!如果你打算在C#中使用这个,试试@CanSpice——我想这篇文章的流行会结束“Can I regex my HTML”问题。悲伤地:没有。回头看,我发现了这个。
<(?<tag>script*)[^>]*>(?<content>.*?)<\/\k<tag>>