我需要在html页面内抓取内联脚本标记。 正则表达式最终将从c#驱动。 现在我正在使用Expresso进行测试。正则表达式在html中捕获多行脚本标记
现在下面是最好的:
.*<script.*\r\n(.*\r\n)*\s*</script>
即
.*<script
抓script标签.*\r\n
抓什么,直到行末的(.*\r\n)*
赶上其他线路剧本\s*</script>
捕捉结束脚本,之前有任何缩进
它抓住第一个标记之间的所有东西,包括html和其他脚本标记。
我需要在html页面内抓取内联脚本标记。 正则表达式最终将从c#驱动。 现在我正在使用Expresso进行测试。正则表达式在html中捕获多行脚本标记
现在下面是最好的:
.*<script.*\r\n(.*\r\n)*\s*</script>
即
.*<script
抓script标签.*\r\n
抓什么,直到行末的(.*\r\n)*
赶上其他线路剧本\s*</script>
捕捉结束脚本,之前有任何缩进它抓住第一个标记之间的所有东西,包括html和其他脚本标记。
同一行上的两个脚本会破坏你的正则表达式。试着在你的问题的网页来源。
解析HTML与正则表达式是不是一个很好的主意(存在于你的问题的评论这answers为什么的<center>
不能持有链接);改为使用HTML分析器。
下面的代码片段通过使用HtmlAgilityPack选择<script>
节点:
var doc = new HtmlDocument();
doc.Load(html);
var scripts = doc.DocumentNode.SelectNodes("//script");
这是不是比正则表达式simplier?
如何实现“点匹配所有”,用简单的东西:
<script\b[^>]*>(.*?)</script>
记住匹配是不一样的拍摄。这应该捕获($ 1)标签之间的内容。我没有使用http://regexpal.com/
快速测试在Eclipse中使用bosinski.com/regex(我知道这不是C#)这里是我的测试文件(后面的结果):
<html>
<SCRIPT LANGUAGE="JavaScript"><!--
function demoMatchClick() {
var re = new RegExp(document.demoMatch.regex.value);
if (document.demoMatch.subject.value.match(re)) {
alert("Successful match");
} else {
alert("No match");
}
}
// -->
</SCRIPT>
<script language="fred">
this is the second set of code
</script>
</html>
正则表达式匹配的结果:
Found 2 match(es):
start=8, end=275
Group(0) = <SCRIPT LANGUAGE="JavaScript"><!--
function demoMatchClick() {
var re = new RegExp(document.demoMatch.regex.value);
if (document.demoMatch.subject.value.match(re)) {
alert("Successful match");
} else {
alert("No match");
}
}
// -->
</SCRIPT>
Group(1) = <!--
function demoMatchClick() {
var re = new RegExp(document.demoMatch.regex.value);
if (document.demoMatch.subject.value.match(re)) {
alert("Successful match");
} else {
alert("No match");
}
}
// -->
start=277, end=344
Group(0) = <script language="fred">
this is the second set of code
</script>
Group(1) =
this is the second set of code
根据你问的人,你有不同的问题。无论是你的问题是,你使用HTML的正则表达式,或量词太贪婪。
我不知道你想解决的问题,但机会很好,你的解决方案应该是使用html解析器。
如果你想坚持使用正则表达式,那么使用量词*?
的不确定版本。然后,您的正则表达式将是这个样子
.*<script.*\r\n(.*\r\n)*?\s*</script>
,这意味着需要直到第一结束标记,将匹配的行数更少。
你用正则表达式解析HTML有问题吗? [颜色我感到惊讶](http://stackoverflow.com/a/1732454/424509)! – CanSpice 2012-03-23 17:30:30
如果你打算在C#中使用这个,请尝试http://htmlagilitypack.codeplex.com/ – Stephen 2012-03-23 17:40:07
@CanSpice - 我认为这篇文章的受欢迎程度已经结束了“我可以将HTML的正则表达式”问题。可悲的是没有。 – David 2012-03-23 18:45:17