我的代码可以在下面的3个可能的URL中给出,我想提取用户名' mrsmith '可以是任何类型的用户名,具体取决于传递的URL,而“某些网站' /#39; / artist /'和' / portfolio /'保持不变:
http://www.somewebsite.com/artist/mrsmith
http://mrsmith.somewebsite.com/
http://mrsmith.somewebsite.com/portfolio/variablenames
使用正则表达式有优雅的方法吗?
答案 0 :(得分:3)
以下正则表达式会在/
符号后跟.
或$
(结束)
(?<=\/)mrsmith(?=\.|$)
<强>解释强>
(?<=\/)
使用正面的后视镜。它将标记设置在/
符号后面。mrsmith(?=\.|$)
再次检查字符串mrsmith
,如果它在那里再次检查mrsmith
字符串后面的符号是点还是结尾。如果这些条件为真,则它匹配相应的mrsmith
字符串。<强>更新强>
你的正则表达式是,
(?=www\.).*\/\K.*|(?<=http:\/\/)[^\.]*
OR
(?=www\.).*\/\K.*|(?!www\.)(?<=http:\/\/)[^\.]*
当一行包含/
时,它匹配上一个www.
后的字符串,或者如果http://
不符合.
,则匹配www.
之后的字符串{{1}}出现在那条线上。
答案 1 :(得分:0)
最简单的正则表达式
http:\/\/(.*?)\..*\/(.*)
这将匹配两个组子域和结束路径
所以这些将是上面三行的匹配
MATCH 1
www
mrsmith
MATCH 2
mrsmith
MATCH 3
mrsmith
variablenames
现在您可以选择哪个组是用户名
例如,如果第一组有www
,那么肯定第二组是第一组