【发布时间】:2015-01-08 13:51:34
【问题描述】:
我正在尝试使用 C# 中的正则表达式从字符串中解析多个主机名。
示例字符串:abc.google.com another example here abc.microsoft.com and another example abc.bbc.co.uk
我一直在尝试的代码如下:
string input = "abc.google.com another example here abc.microsoft.com and another example abc.bbc.co.uk";
string FQDN_Pat = @"^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$";
Regex r = new Regex(FQDN_Pat);
Match m = r.Match(input);
while (m.Success)
{
txtBoxOut.Text += "Match: " + m.Value + " ";
m = m.NextMatch();
}
如果字符串完全符合模式,则代码有效,例如abc.google.com.
如何更改正则表达式以匹配适合示例字符串的模式,例如所以输出将是:
匹配:abc.google.com
匹配:abc.microsoft.com
匹配:abc.bbc.co.uk
如果这是非常简单的事情,请提前道歉,因为我对正则表达式的了解不是很好! :) 谢谢!
更新:
将正则表达式更新为以下内容(删除 ^ 和 $):
string FQDN_Pat = @"([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))";
产生以下输出:
第 1 场比赛:abc.g
匹配 2:oogle.c
第 3 场比赛:abc.m
第 4 场比赛:icrosoft.c
第 5 场比赛:abc.b
第 6 场比赛:bc.c
第 7 场比赛:o.u
【问题讨论】:
-
first - 从开头删除
^并从末尾删除$- 它们意味着匹配应该从第一个字符开始并在最后一个字符结束,这需要字符串完全匹配 -
仅供参考:您可以将
([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])缩短为([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?) -
FQDN 以点结尾 (
.)。它们都不是 FQDN,因为它们不以点结尾。我更正了标题和问题陈述。