有人可以向我解释如何为这样的事情制作正则表达式
https://clips.twitch.tv/user/ClipLink
我做了这个,它对用户工作正常但不是剪辑链接,它只做第一个字母。
https://clips.twitch.tv/(?<user>[^ ]+?)/(?<url>[^ ]+?)
如果有人可以发布可行的表达并解释每个部分是什么,那就太棒了:)
答案 0 :(得分:1)
你的问题在这里:
https://clips.twitch.tv/(?<user>[^ ]+?)/(?<url>[^ ]+?)
是最后一个?
。添加到量词的?
使模式变得懒惰而不是贪婪。当它贪婪时,它将消耗尽可能多的字符,并且只在必要时才返回(以匹配模式的其余部分)。当它变得懒惰时,它将尽可能少的字符只在必要时扩展。由于+
匹配一个或多个,因此它可以匹配的最小值为1,因此它的作用就是1。删除?
将解决问题。
您也可以在最后添加$
来解决此问题。这匹配字符串的结尾,因此它会强制延迟量词扩展,直到它到达字符串的末尾。
正如其他人所指出的,匹配&#34;而不是空间&#34;有点奇怪。因为你的网址中没有空格。您可以匹配[^/]
,或者您可以完全放弃,只需匹配以下内容:
https:\/\/clips.twitch.tv\/(?<user>.+?)\/(?<url>.+)$
或者您可以使用具有处理Uri的属性和方法的Uri类。
例如:
var uri = new Uri("https://clips.twitch.tv/user/ClipLink");
var segments = uri.Segments;
Console.WriteLine(segments[1)); // user/
Console.WriteLine(segments[2]); // ClipLink