2016-08-01 212 views
2

你好,我试图找到一个正则表达式,将赶上在网址中的条款。URL正则表达式组捕获

例如,给定:
https://stackoverflow.com,它会赶上“计算器”
并给予https://stackoverflow.com/questions/ask,它会赶上“计算器”,“问题”,“问”,后在斜线字符之间的任何潜在的条款域名。

到现在为止,我设法找到下面的正则表达式,但不能重复捕获组

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

你们是否有解决这一问题的任何方式?那太好了。

回答

0

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

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

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

1

试试这个:

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

在记事本++

+0

未通过'https:// www.stackoverflow.com' –

+0

也没有捕获'问题',或'问'从'https:// stackoverflow.com/questions/ask' – castis

+0

真的吗? https://regex101.com/r/yT4sW1/1 –

0

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

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

(注:需要/x修改)

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

0

感谢我设法重新安排它为它一起工作了“ www“

(?:\/(?:www\.)?)\K([\w\d]+) 
+0

'\ w'包含'\ d'因此'\ w'可以用来代替[\ w \ d] –

+0

'https: // meta.stackoverflow.com'输入字符串? –