我试图通过正则表达式实现这一目标,但似乎根本没有工作。 我用PHP,Javascript尝试了相同的正则表达式模式,它就像一个魅力。我不知道为什么它不能用C#。
这是我的代码示例:
Regex mysReg = new Regex(@"<form[^>]*action=""do\.php""[^>]*>(.*)<\/form>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
MatchCollection form = mysReg.Matches(html);
如果我删除了部分<\/form>
,则正则表达式可以正常工作,但它不会获得括号内的内容。
现在有些人会告诉我使用“HtmlAgilityPack”。我试图使用它,但是,由于我还不熟悉C#,我发现很难使用它,因为它没有附带文档。
那么有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
您的(.*)
与换行符不匹配。 ([\S\s]*?)
可以使用,或者您可以使用RegexOptions.SingleLine
打开换行符匹配。
但是,正如其他人所指出的那样,您应该使用HTML Agility Pack而不是trying to use regex to parse HTML。
答案 1 :(得分:2)
使用HTML Agility Pack来解析文档而不是注册。你可能觉得不舒服,但这是要走的路。
下载附带示例 - 可以执行各种操作的项目,因此您可以阅读代码以了解它们是如何完成的。
然后,您将能够以XPath语法查询它,但它会公开类似XmlDocument
的接口。
请参阅here,以了解不使用RegEx解析HTML的充分理由。
答案 2 :(得分:1)
我在RegexBuddy玩这个并得到了
@"<form[^>]*action=""do\.php""[^>]*>([\s\S]*)<\/form>"
使用我的(匆忙拼凑)样本数据。