如何在C#中识别具有相似模式的网址?

时间:2012-06-05 10:01:21

标签: c# regex string

我需要一种方法来识别具有类似模式的网址,例如匹配时返回true的函数

http://mysite.com/page/123
and
http://mysite.com/page/456

http://mysite.com/?page=123
and
http://mysite.com/?page=456

http://mysite.com/?page=123&param=2
and
http://mysite.com/?page=456&param=3

我不需要在这里检查网址的有效性,只知道模式是否相同。 我可能需要一个正则表达式,但无法弄清楚如何做到这一点。有人可以帮忙吗?感谢。

3 个答案:

答案 0 :(得分:3)

可能你可以尝试levenshtein距离 http://www.dotnetperls.com/levenshtein,用于查找字符串之间的相似性。

答案 1 :(得分:2)

使用a lowest common subsequence algorithm并除以任一字符串的长度。如果它高于任意数字,它们就足够了。

答案 2 :(得分:2)

不是一个具体的答案,但我觉得如果你想让它在一般意义上运作良好,你需要内容意识,即你需要将每个URL分成几个小节:

  • 协议
  • 路径
  • 查询字符串

......并分别处理每个。可接受的模糊程度将控制你需要多少分解URL,但每个部分(我觉得)需要非常具体的检查。协议和域可以是直字符串匹配,但路径也许可以用'/'分割,然后在基本长度检查后,可以逐个比较元素,只比较相同深度的项目(使用直接相等或“改变距离“就像前面提到的Levenshtein距离一样”。通过对“&”的简单分割,可以将查询字符串分解为字典。然后通过“=”,您可以根据需要对其进行排序和比较。这也可以满足@ MarcGravell关于重新排序的查询字符串参数的问题。