C#正则表达式只抓取第一个字母

时间:2016-06-02 17:22:39

标签: c#

有人可以向我解释如何为这样的事情制作正则表达式

https://clips.twitch.tv/user/ClipLink

我做了这个,它对用户工作正常但不是剪辑链接,它只做第一个字母。

https://clips.twitch.tv/(?<user>[^ ]+?)/(?<url>[^ ]+?)

如果有人可以发布可行的表达并解释每个部分是什么,那就太棒了:)

1 个答案:

答案 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