簡體   English   中英

解析字符串中的多個主機名

[英]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非常復雜,因此我嘗試對其進行簡化。 所以我要做的是

  1. 刪除^$以使正則表達式在任何地方都匹配
  2. 簡化與您匹配的字符,因此代替([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中的名稱規則更復雜,請修改此值
  3. 用於查找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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM