[英]Parse multiple hostnames from string
我正在嘗試使用C#中的Regex從字符串解析多個主機名。
示例字符串: 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:ou
由於regexp非常復雜,因此我嘗試對其進行簡化。 所以我要做的是
^
和$
以使正則表達式在任何地方都匹配 ([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])
我正在使用([a-zA-Z0-9])+
,表示查找長度大於一的任何字母數字序列(“ +
表示您匹配出現一次或多次的char )。 我們稱它為X
如果FQDN中的名稱規則更復雜,請修改此值 用於查找FQDN的表達式為X(\\.X)+
。 可以將其視為一個字符序列,后跟一個或多個序列,所有字符均由點( .
)分隔。 代入X
您得到的完整表達式為
string FQDN_Pat = @"([a-zA-Z0-9]+)(\\.([a-zA-Z0-9])+)+";
這實際上與您的示例匹配,但是如果域名中存在一些技巧,我建議您閱讀C#regexp手冊以獲取更多參考。
之所以會出現這種現象,是因為您僅匹配的字符串中除了模式以外還不包含其他任何內容。 您正在使用^
(字符串的開頭)和$
(字符串的結尾)。 如果要在輸入字符串中的任何位置匹配模式,請從模式中刪除這些字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.