【发布时间】:2015-11-08 09:29:54
【问题描述】:
我在使用 C# 中的正则表达式从 html 文本中获取所有 <script> 及其各自的结束 </script> 标记时遇到问题。
我创建了一个示例 html,如下所示:
<html>
<head>
<title>
</title>
<script src="adasdsadsda.js"></script>
</head>
<body>
<script type='javascript'>
var a = 1 + 2;
alert('a');
</script>
</body>
<script></script>
</html>
我使用的正则表达式是:
<script.*>[^>]*<\/script>
我经常使用regexr 来验证/测试我的正则表达式(强烈推荐!)。它显示有问题的正则表达式捕获了 3 次出现(正如我所料)。
但是 C# 的 regex.Matches 没有捕获 3 个实例,而是一个包含所有事件的单个实例。这是Matches 方法的预期行为吗?我一直在使用它,并且一直将所有事件作为单独的捕获。
为什么在我的情况下会发生这种情况?
P.S:在回答这个问题时,如果你想指出正则表达式不适合解析 HTML,请解释为什么 regexr 和 .NET 的正则表达式会给出不同的结果?他们有不同的正则表达式实现吗?
【问题讨论】:
-
@SIslam:谢谢,但这意味着 C# 的 Regex 实现与 regexr 不同?奇怪
-
啊!我的意思是不要用 > 解析 HTML
-
请以粗体查看我的更新;)
-
是的,它们是不同的口味。 RegExr 使用浏览器的 RegExp 引擎进行匹配。请改用 .net 测试器(regexhero.net/tester 或 regexstorm.net/tester)。但是,.net also returns the same 3 matches。也就是说,如果您的 JavaScript 代码中有
>登录,它将失败...不要使用正则表达式来解析 HTML,You can use the HTML Agility Pack
标签: regex html-parsing