【问题标题】:Regular Expression to match relative URLs匹配相对 URL 的正则表达式
【发布时间】:2011-03-27 16:52:56
【问题描述】:

寻找与以下相对 URL 匹配的正则表达式:

所有 url 都以 /abc/ 开头,但我们不知道它在哪里结束,并且末尾没有任何文件扩展名。

/abc/xyz

/abc/part1/part2

/abc/红/蓝/白/绿/黑

等等。

有什么帮助吗?

【问题讨论】:

  • 您对哪种编程语言感兴趣?

标签: c# regex url relative-path


【解决方案1】:

我在这里写的答案是针对 PHP 的;在我写它的那一刻,你没有报告你有兴趣得到答案的编程语言。

  • 如果你想要一个正则表达式来检查路径是否以/abc/开头

    preg_match('|^/abc/.*$|i', $path);

  • 如果你想要一个返回/abc/之后部分的正则表达式

    preg_match('|^/abc/(.*)$|i', $path, $matches);

在这两种情况下,都可以避免使用正则表达式;你可以使用字符串函数。

【讨论】:

  • 感谢您的努力。我们可以使用字符串函数,但这会花费更多时间。我们必须解析数以千计的文件:(
【解决方案2】:

试试这个正则表达式:

/abc/(?:[A-Za-z0-9-._~!$&'()*+,;=:@]|%[0-9a-fA-F]{2})*(?:/(?:[A-Za-z0-9-._~!$&'()*+,;=:@]|%[0-9a-fA-F]{2})*)*

这来自ABNF of a generic URI

【讨论】:

  • 感谢您的努力,但它给了我错误“解析正则表达式时出错”regexhero.net/tester
  • @Malik:我猜你看到的错误取决于编程语言。
  • @Gumbo:非常感谢您的帮助和支持。
  • @Gumbo:我们研究了您提供的正则表达式,它具有出色的“反向引用”概念。试图调整并提出以下可能有助于其他人的正则表达式 /abc(?:/(?:[^\x00-\x1F\"\\|:\*\\?/#])*)* 谢谢再次。PS 这个概念是,我们不是去寻找有效的字符,而是去检查无效的字符。
  • @Malik:纯空格[]^,在 URL 路径段中不是有效字符;而% 仅在后跟两个十六进制数字时才允许使用。但是,:*~ 是允许的。
【解决方案3】:
/^\/abc\//

但是我的猜测是你在问题中遗漏了一些东西......

【讨论】:

  • 感谢您的努力,但没有奏效。好吧,我们面临的问题是相对 URL 的长度是未知的,并且它不以附加文件扩展名的点 (.) 结尾。我们确实为以 . 结尾的相对 url 创建了一个正则表达式。和文件扩展名 "/abc/.*?[^\x00-\x1F\"\|:*\?/]+\.[a-zA-Z0-9]{3,4}" 但不能这样做的长度未知。
  • 也许你应该更好地解释你的场景。我得出的结论是,您正在(基本上是随机的)文本文档中搜索任何以 abc 开头的 URL?您使用的是什么 planguage/regex 引擎?
  • @RoRoRa:现在我们正在使用radsoftware.com.au/regexdesignerregexhero.net/tester 是的。我们想要的是从与 /abc/ 分层的文件中获取所有相关 URL,但我们不知道在哪里或如何停止。在我之前评论中提到的其他情况下,我们使用文件扩展名来停止,但这在相对 url 最后没有文件扩展名的情况下不可用。构建正则表达式。
  • 那么我只能指出 Gumbo 的答案,这对我来说似乎很好。也许您的工具使用不同的正则表达式语法?
  • @RoRoRa:非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多