0

我需要一种方法来识别具有相似模式的 url,例如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

我不需要在这里检查 url 的有效性,只需找出模式是否相同。我可能需要一个正则表达式,但不知道该怎么做。任何人都可以帮忙吗?谢谢。

4

3 回答 3

3

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

于 2012-06-05T10:56:20.967 回答
2

使用最低公共子序列算法并除以任一字符串的长度。如果它高于任意数字,它们就足够常见了。

于 2012-06-05T10:03:21.960 回答
2

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

  • 协议
  • 领域
  • 小路
  • 查询字符串

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

于 2012-06-05T11:18:42.503 回答