URL正则表达式组捕获

时间:2016-08-01 13:09:23

标签: regex url regex-greedy

您好我正在尝试找到一个可以捕获网址中的条款的正则表达式。

例如,给定:
https://stackoverflow.com,它会捕获“stackoverflow” 给定https://stackoverflow.com/questions/ask,它会捕获“stackoverflow”,“questions”,“ask”以及域名后斜杠字符之间的任何潜在术语。

到目前为止,我设法找到以下正则表达式,但它无法重复捕捉群组

https?:\/\/(?:www\.)?([\da-z-]*)(?:[\.a-z]*)(?:\/([\da-z]*)\/?)+

你们有什么方法可以解决这个问题吗?那会很棒。

4 个答案:

答案 0 :(得分:1)

试试这个:

(?:(\/))\K(\w+)

在notepad ++中测试

答案 1 :(得分:0)

您可以尝试使用两个单独的正则表达式 - 一个用于主机名部分,另一个用于路径部分中的术语。然后将它们与交替构造结合起来进行全局搜索:

https?:\/\/(?:\w+\.)*(\w+)\.\w+   # this would capture hostname "term"
  |
\/(\w+)                           # this would capture path "terms"

(注意:需要/x修饰符。)

演示:https://regex101.com/r/nA8jT9/2

答案 2 :(得分:0)

谢谢我设法重新安排它,以便与" www"

一起使用
(?:\/(?:www\.)?)\K([\w\d]+)

答案 3 :(得分:0)

我测试了Michal M的答案似乎没有得到" www。"所以我更新了它

/(?:\/(?:w{3}\.)?)\K([\w]+)/i

编辑:只要匹配" www。"我把它放在一个非捕获组中,因此它不会被捕获。顺便说一下,我还放了不区分大小写的修饰符,所以" WWW。"也没关系。