【发布时间】:2011-09-07 10:39:57
【问题描述】:
只是为了让大家理解所涉及的词汇,URL的一般结构如下:
http :// www.a.com / path/to/resource.html ? query=value # fragment
{scheme} :// {authority} / {path} ? {query} # {fragment}
路径由路径和资源组成,对于path/to/resource.html,路径为path/to/,资源为resource.html。
可怜、肮脏和野蛮:
HTML,就像它在野外发现的那样,可以是poor, nasty and brutish,,尽管通常很不短。在这个贫穷、肮脏和野蛮的世界中,实时链接碰巧存在,尽管 URL 应该遵守 the standards,但它们本身可能是贫穷、肮脏和野蛮的。因此,考虑到这一点,我向您提出问题...
问题:
我正在尝试创建一个正则表达式以从 URL 的路径中删除资源,当网页中的链接是相对路径时,这是必需的。例如:
- 我访问
www.domain.com/path/to/page1.html。 - 有一个到
/page2.html的相对链接 - 从 URL 中删除
/page1.html - 将
/page2.html附加到www.domain.com/path/to
结果:www.domain.com/path/to/page2.html
我被困在第 3 步了!
我已经隔离了路径和资源,但现在我想将两者分开。我试图想出的正则表达式如下所示:\z([^\/]\.[^\/])
在 C# 中,相同的正则表达式是:"\\z([^/]\\.[^/])"
翻译成英文,正则表达式的意思应该是:匹配字符串的结尾,其中包括由点分隔的所有字符,只要这些字符不是斜线。
我尝试了那个正则表达式,但目前它失败了。实现上述结果的正确查询是什么。
以下是一些示例:
/path/to/resource.html => /path/to/ 和 resource.html
/pa.th/to/resource.html => /pa.th/to/ 和 resource.html
/path/to/resource.html/ => /path/to/resource.html/
/*I#$>/78zxdc.78&(!~ => /*I#$>/ 和 78zxdc.78&(!~
感谢您的帮助!
【问题讨论】:
-
您的最终样本不是合法的 URI,因为它包含许多必须转义的字符。
-
为什么不使用System.Uri?
-
@Rob 我知道这不是一个合法的 URI,但没有什么能阻止人们在他们的网页中放置此类链接。我仍然需要解析这些链接(尽管 Uri 类处理了大部分这些内容)。
-
@amit_g 我已经使用了 Uri 类,但它只提供了一个 PathAndQuery(实际上是 Path+Resource+Query),所以我删除了查询,我仍然必须删除资源。