【发布时间】:2013-05-09 18:01:20
【问题描述】:
我正在尝试更改将匹配诸如http://www.google.com 之类的网址的正则表达式,并允许它匹配诸如j:\Folder\Name\Here 之类的文件夹名称
我正在解析消息中可能存在的任何链接的文本,并使用匹配的字符串创建 Process.Start(string) 调用。
我现在的正则表达式如下所示:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'"".,<>?«»“”‘’]))
我认为我可以添加到 /{1,3} 部分以匹配 \{1,1} 也可能有效,但似乎并非如此。
我不确定正则表达式到底在做什么,因为我不是自己写的。
是否有人已经有一个可以匹配 URL 以及文件系统文件夹路径的正则表达式的工作示例?或者有没有办法改变这个现有的正则表达式来达到这个目的?
【问题讨论】:
-
我建议您使用 2 个正则表达式:一个用于 Internet URL,一个用于文件系统路径。将两者都放在一个表达式中会使它变得急切(处理缓慢)并且更难理解和维护。
-
我建议你根本不要使用正则表达式;对 URL 使用单独的代码路径,使用
Uri类和文件路径,使用FileInfo类。这些类已经处理了解析、匹配、提取组件等等。 -
@AndreCalil 我在开车去吃午饭时想到了这一点。使用 2 个正则表达式非常有意义,并且它们每个都有其特定的目的。这就是我将尝试实现的。
-
@ZackT。好的。我相信您会在互联网上轻松找到这些正则表达式。如果您有任何其他问题,请告诉我们。
-
您可能会发现this 站点很有用。有关 URL,另请参阅 this answer。我的建议是有两个正则表达式,一个用于文件夹,一个用于 URL,然后将它们组合成一个。