簡體   English   中英

正則表達式選擇長字符串的url部分

[英]Regex to pick out url part of a long string

我有一個很長的字符串,在該字符串的某個地方,有一個URL。 在此示例中,該URL在開頭。

"http://localhost:1234/api/$metadata#this_entry_is_variable_and_can_exist_of_numbers_and_characters/$entity","Version":"AAAEEEIIU=""

我正在嘗試使用C#為此特定字符串編寫一個RegEx,以遵循以下規則提取URL:

  1. 網址始終以http://或https://開頭
  2. 在url之后,有時會指定端口,但並非總是
  3. 在端口之后,有一個路徑,在此示例中為/api ,但可以是任何字符
  4. 路徑之后,在此示例中/api ,始終為/$metadata
  5. /$metadata之后,有一個#后跟任何字符的字符串
  6. 網址的最后部分始終以/$entity結尾

到目前為止,這是我想出的RegEx:

(^http://\w+(\.\w+)*(:[0-9]+)?\/?(\/[.\^$metadata$(\#(\[a-zA-Z0-9)(\$(\entity$))]*).*?)

在LinqPad中進行測試時,會發生以下問題:

  1. 如果該字符串包含的網址超出限制,則沒有匹配項
  2. 它不嚴格在/ $ metadata上驗證,它接受/ $ metadata1111
  3. 它不會嚴格驗證/ $ entity,而是接受/ $ entity111
  4. 顯然,它還不接受https://。

任何人都可以給我一個提示,因為我被困住了。

您的正則表達式不遵循正則表達式構造規則,因此沒有預期的匹配。 這是您要表達的內容:

https?://[^/]+/[^/]+/\$metadata#[^/]+/\$entity

現場演示

試試這個正則表達式:

https?://[\w-]+(?:\.[\w-]+)*(?::\d+)?/.*?\$metadata#.*?\$entity\b

演示版

給您的問題:

  1. 由於^您僅匹配了一個正則表達式。 如果未設置RegexOptions.Multiline則僅與輸入字符串的開頭匹配;如果設置了RegexOptions.Multiline則僅與每個新行的開頭(在換行符之后) RegexOptions.Multiline

  2. 正則表達式在$metadata...entity$[]包圍的部分中混雜在一起

  3. 見2。

  4. 只需將s可選?

暫無
暫無

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

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