簡體   English   中英

使用Regex提取數據URL

[英]Extracting data url using Regex

我有網址

domain.com
domain.com/
www.domain.com
http://www.domain.com
http://domain.com
domain.com/catalog/nextcatalog/
domain.com/catalog/nextcatalog/page.html
domain.com/page.html
domain.com/page.html?arg=123&arg2=abc

我想要這樣的數據

[0] = domain.com
[1] = catalog/nextcatalog/
[2] = page.html
[3] = arg=123&arg2=abc

我不知道如何從這樣的鏈接獲取數據

domain.com

在這種情況下,在[0]中我有http:

是否可以創建通用正則表達式,如果不在目錄中,則可以跳過例如目錄或頁面?

我試圖創建像這樣的模式^(?:http:\\/\\/)?(?:www\\.)?(.*?)(?=\\/)(.*)(?=\\/)(.*)$但這在所有情況下都不起作用

使用Uri來解析URL,因為該類旨在遵循相關的RFC進行解析。 該類將允許您訪問它解析的URL的Scheme,主機,端口,路徑,查詢字符串等。

我建議您使用現有的Uri類,該類可輕松訪問uri的各個部分。 示例列表中的某些網址沒有配置,因此您只需要手動添加即可:

Uri uri = new Uri(url.StartsWith("http") ? url : "http://" + url);

現在您可以使用Uri.Host來獲取uri的主機。 為您示例輸入主機將

"domain.com"
"domain.com"
"www.domain.com"
"www.domain.com"
"domain.com"
"domain.com"
"domain.com"
"domain.com"
"domain.com"

您可以執行簡單的字符串替換來擺脫www部分:

uri.Host.Replace("www.", "")

接下來是查詢參數。 您可以從Url.Query獲取它們。 在示例輸入中,只有一個URL具有查詢參數。 返回值將是

?arg=123&arg2=abc

同樣,擺脫起點很容易?

uri.Query.TrimStart('?') // arg=123&arg2=abc

Uri還具有Segments集合,其中將包含Segments數組。 您可以檢查最后一段是否包含. 得到下一個結果:

uri.Segments.Last().Contains('.') ? uri.Segments.Last() : ""

如果是這樣,那么您將在最后一段中獲得page.html 輸出:

""
""
""
""
""
""
"page.html"
"page.html"
"page.html"  

您還可以使用簡單的String.Join將其他段連接成字符串。 或者,您可以在Uri.LocalPath上執行字符串替換:

uri.Segments.Last().Contains('.') ?
   uri.LocalPath.Replace(uri.Segments.Last(), "") : uri.LocalPath;

輸出:

""
""
""
""
""
"/catalog/nextcatalog/"
"/catalog/nextcatalog/"
"/"
"/"

您需要做的就是TrimStart擺脫斜線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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