Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找字符串中的所有链接和电子邮件地址_C#_Regex_Match - Fatal编程技术网

C# 查找字符串中的所有链接和电子邮件地址

C# 查找字符串中的所有链接和电子邮件地址,c#,regex,match,C#,Regex,Match,将字符串中的所有链接和电子邮件地址匹配到列表数组的最简单方法是什么?我在PHP中使用了preg_match,但在C中,它看起来会有很大不同。假设您已经有了一个工作正则表达式,您可以使用,如下所示: static readonly Regex linkFinder = new Regex(@"https?://[a-z0-9.]+/\S+|\s+@\S+\.\S+", RegexOptions.IgnoreCase); foreach(Match match in linkFinder.Matc

将字符串中的所有链接和电子邮件地址匹配到列表数组的最简单方法是什么?我在PHP中使用了
preg_match
,但在C中,它看起来会有很大不同。

假设您已经有了一个工作正则表达式,您可以使用,如下所示:

static readonly Regex linkFinder = new Regex(@"https?://[a-z0-9.]+/\S+|\s+@\S+\.\S+", RegexOptions.IgnoreCase);

foreach(Match match in linkFinder.Matches(someString)) {
    //Do things...
    string url = match.Value;
    int position = match.Index;
}

这应该适用于以下链接:

https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?

这适用于电子邮件地址:

[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}

您是在要求一个正则表达式,还是在问如何在C#中使用它?重复:所说的“链接”是指仅http[s]地址,还是包括mailto:、javascript:,等等?-1:有顶级域“email regex”将无法匹配(例如博物馆TLD)。域应该是小写的,所以实际上它不会匹配任何一个。Regex是查找电子邮件地址的错误工具。@Richard:Regex不是查找电子邮件的“错误工具”。它们正是正确的工具。它们是错误的分析和验证工具,但查找字符串是正则表达式的目的。@John:对于任何短正则表达式,都会有它找不到的有效电子邮件地址。(例如,对于Q中的一个,许多O'Reilly会感到失望。)@serhio:
\S+
应该与所有这些匹配。我主要是想演示如何使用正则表达式。