2016-05-24 72 views
0

我有一個關於正則表達式來從URL獲取信息的問題。如何使用Regx獲取Subsite或QueryString

它可能會在前面討論,但我正在尋找一種混合方法。

如果用戶要麼提供了一個子網站,要麼用戶提供了一個查詢字符串,並且根據條件我想在URL請求中添加一個規則。

正則表達式:/([^,]*)
輸入:youtube.com/data/beta

我得到數據/測試,這正是我所期待的。

但是當我通過輸入爲http://youtube.com/data/beta,它給我/youtube..../,這是正確的,但我想排除第一//[DomainName]

注:我不能排除在youtube.com,因爲我打算在某些規則中使用這個正則表達式,所以請給我發送回答或評論,它可以適用於任何類型的URL。

回答

0

說明

^(?:https?:\/\/)?[^\/]+\/|([^?\n]+) 

Regular expression visualization

這個正則表達式將執行以下操作:

  • 匹配字符串開始http://https://
  • 跳過域名
  • 捕捉的子域名之後和查詢字符串之前

現場演示

https://regex101.com/r/zC4gZ6/1

示例文本

youtube.com/data/beta 
http://youtube.com/data/beta?Droid=This_is_not_the_droid_you_are_looking_for 

樣品匹配

[1][0] = youtube.com/data/beta 
[1][1] = data/beta 

[2][0] = http://youtube.com/data/beta 
[2][1] = data/beta 

說明

NODE      EXPLANATION 
---------------------------------------------------------------------- 
^      the beginning of a "line" 
---------------------------------------------------------------------- 
    (?:      group, but do not capture (optional 
          (matching the most amount possible)): 
---------------------------------------------------------------------- 
    http      'http' 
---------------------------------------------------------------------- 
    s?      's' (optional (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
    :      ':' 
---------------------------------------------------------------------- 
    \/      '/' 
---------------------------------------------------------------------- 
    \/      '/' 
---------------------------------------------------------------------- 
)?      end of grouping 
---------------------------------------------------------------------- 
    [^\/]+     any character except: '\/' (1 or more 
          times (matching the most amount possible)) 
---------------------------------------------------------------------- 
    \/      '/' 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    [^?\n]+     any character except: '?', '\n' 
          (newline) (1 or more times (matching the 
          most amount possible)) 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 

加分

要包括查詢字符串,如果他們存在,那麼添加(?:\?(.*?))?$ 上述表達式的末尾,以便它看起來像這樣。

^(?:https?:\/\/)?[^\/]+\/([^?\n]+)(?:\?(.*?))?$ 

Regular expression visualization

+0

感謝滾裝喲,你真棒。但我只有一個問題,我怎樣才能將查詢字符串也包含在結果中? –

+0

我剛在我的答案的末尾提供了一個更新來覆蓋查詢字符串部分。這允許查詢字符串部分存在或不存在。 –

相關問題