c# Regex.Match 问题与多个匹配结果
本文关键字:结果 Regex Match 问题 | 更新日期: 2023-09-27 17:53:35
我正在尝试使用Regex.Matchs,它的工作方式似乎与我习惯于使用PHP等其他语言的方式不同。这是我正在尝试做的:
我想从特定网页获取所有表单,但是当我尝试执行以下操作时
String pattern = "(?i)<form[^<>]*>(.*)<''/form>";
MatchCollection matches = Regex.Matches(content, pattern );
foreach (Match myMatch in matches)
{
MessageBox.Show(myMatch.Result("$1"));
}
即使该页面上有三个窗体,此代码也不会显示任何内容。似乎当我使用 (.*( 时,它只是跳过所有内容直到内容结束。
默认情况下,Regex
类使.
运算符不匹配 ''r 和 '。尝试替换它:
MatchCollection matches = Regex.Matches(content, pattern );
跟:
MatchCollection matches = Regex.Matches(content, pattern, RegexOptions.Singleline);
对正则表达式的主要部分尝试这样的事情:
String pattern = "<form[''d''D]*?</form>";
这是我目前用来从文档中删除特定类型的所有标签的模式,但应该可以很好地找到表单标签。如果需要,可以更改 ''d''D 部分。
string pattern = @"(?is)<form[^<>]*>(.*?)</form>";
该正则表达式在PHP和C#(或者更准确地说,PCRE和.NET(中应该相同。 如果您在没有?
的情况下在 PHP 中获得最少的匹配项,您可能设置了/U
("不贪婪"(选项,例如:
preg_match_all('~<form[^<>]*>(.*)</form>~isU', $subject, $matches);
或
preg_match_all('~(?isU)<form[^<>]*>(.*)</form>~', $subject, $matches);
.NET没有PCRE的不贪婪模式的等价物。