【问题标题】:Regex to get parts of URL正则表达式获取部分 URL
【发布时间】:2014-09-04 05:19:41
【问题描述】:

您好,我的网址如下:

我需要解析上面的 URL 来得到两组作为 folloes:

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]+)(\?([^#]*))?(#(.*))?

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

【问题讨论】:

  • 这需要是一个正则表达式吗?你可以使用 System.Uri 类,然后通过它取出这些部分吗?
  • 您也想验证网址吗?

标签: asp.net regex vb.net url


【解决方案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

如果你想同时做一些非常轻量级的url验证,你可以使用这个:

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

或者,根据您修改后的输入:

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

【讨论】:

  • @Braj 实际上在我的代码中我验证了某些部分的 URL,即使这个正则表达式会验证 URL 意味着它会很好
  • 如果你想同时做一些轻量级的 url 验证,我添加了第二个选项。如您所知,url 可以有各种形状和形式,因此这并不是一个适用于各种天气的可靠 url 验证器。每个 url 正则表达式都有优点和缺点。 :)
  • IMO 最好的网站是 rexegg.com 和 regular-expressions.info... 但是如果你有时间,最好的方法是阅读 Mastering Regular Expressions 3rd Ed 和 The Regular Expressions Cookbook。然后在各种引擎中使用正则表达式。听起来你上瘾了,你很快就会成为专业人士。 :)
  • 嗨,如果我有这样的链接 http://vimeo.com/moogaloop.swf?clip_id=82422002,它应该给 group1 作为 http://vimeo.com/ 和 group2 作为 82422002,但不会像这样
  • 添加了一个适用于您修改后的输入的选项:^(.*[/=])([^/=]+$)
【解决方案2】:

你可以使用下面的正则表达式,

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

DEMO

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

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

DEMO

【讨论】:

  • OP 想要验证 URL 请参阅评论。
【解决方案3】:

如果您不想验证 url,那么也试试这个。从索引 1 和 2 中获取匹配组。

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

这里是DEMO

在程序中使用的字符串字面量:C#

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多