如何使用Regx获取Subsite或QueryString

时间:2016-05-24 21:21:41

标签: regex

我有一个关于正则表达式的问题,以便从网址获取信息。

可能会在前面讨论,但我正在寻找混合方法。

如果用户要么提供子网站,要么用户提供查询字符串,并且根据条件我想在URL请求中添加规则。

正则表达式:/([^,]*)
输入:youtube.com/data/beta

我正在获取数据/测试版,这正是我要找的。

但是当我将输入作为http://youtube.com/data/beta传递时,它会给我/youtube..../,这是正确的,但我想先排除//[DomainName]

注意:我无法在youtube.com上排除,因为我将在某些规则中使用此正则表达式,因此请将回复或评论发送给任何类型的网址。

1 个答案:

答案 0 :(得分: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