我有一个关于正则表达式的问题,以便从网址获取信息。
可能会在前面讨论,但我正在寻找混合方法。
如果用户要么提供子网站,要么用户提供查询字符串,并且根据条件我想在URL请求中添加规则。
正则表达式:/([^,]*)
输入:youtube.com/data/beta
我正在获取数据/测试版,这正是我要找的。 p>
但是当我将输入作为http://youtube.com/data/beta
传递时,它会给我/youtube..../
,这是正确的,但我想先排除//[DomainName]
。
注意:我无法在youtube.com
上排除,因为我将在某些规则中使用此正则表达式,因此请将回复或评论发送给任何类型的网址。
答案 0 :(得分:0)
^(?:https?:\/\/)?[^\/]+\/|([^?\n]+)
此正则表达式将执行以下操作:
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]+)(?:\?(.*?))?$