正则表达式获取URL的一部分

时间:2014-07-14 10:05:13

标签: asp.net regex vb.net url

您好我的网址如下:

我需要解析上面的URL以获得两个组作为后续行为:

Group1                 Group 2
vimeo.com/             99612902
www.vimeo.com/         99612902
http://vimeo.com/      99612902
http://www.vimeo.com/  99612902
http://vimeo.com/      81368903

我尝试了以下正则表达式

^((http[s]?|ftp):\/)?\/?([^:\/\s]+)(:([^\/]*))?((\/[\w\-]+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?

但是这会产生不必要的空组。请帮帮我。

3 个答案:

答案 0 :(得分:1)

根据您的输入,我们可以将这两个部分匹配到第1组和第2组:

^(.*/)(.*)

或者,对于您的修订输入:

^(.*[/=])([^/=]+$)

the demo中,请参阅右侧窗格中的捕获组。

在VB.NET中,你可以这样做:

Dim theUrl As String
Dim theNumbers As String
Try
    ResultString = Regex.Match(SubjectString, "^(.*/)(.*)", RegexOptions.Multiline)
    theUrl = ResultString.Groups(1).Value
    theNumbers = ResultString.Groups(2).Value
Catch ex As ArgumentException
    'Syntax error in the regular expression
End Try

选项2

如果您想同时进行一些非常轻量级的网址验证,可以使用:

^((?:http://)?(?:www\.)?[^./]+\.\w+/)(.*)

或者,修改后的输入:

^((?:http://)?(?:www\.)?[^./]+\.\w+[=/])([^/=]+$)

答案 1 :(得分:0)

只需使用以下正则表达式

即可
^(.*\/)(.*)$

DEMO

从开始到最后一个/符号由group1捕获。剩余的字符被捕获到group2中。

^((?:https?:\/\/)?(?:www\.)?(?:[^.]*)\.\w+\/)(.*)$

DEMO

答案 2 :(得分:0)

如果您不想验证网址,请尝试使用此功能。从索引1和2获取匹配的组。

(.*?[^\/]*\/)(\d+)

这是DEMO

程序中使用的字符串文字:C#

@"(.*?[^\/]*\/)(\d+)"