我需要一种方法来识别具有类似模式的网址,例如匹配时返回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¶m=2
and
http://mysite.com/?page=456¶m=3
我不需要在这里检查网址的有效性,只知道模式是否相同。 我可能需要一个正则表达式,但无法弄清楚如何做到这一点。有人可以帮忙吗?感谢。
答案 0 :(得分:3)
可能你可以尝试levenshtein距离 http://www.dotnetperls.com/levenshtein,用于查找字符串之间的相似性。
答案 1 :(得分:2)
使用a lowest common subsequence algorithm并除以任一字符串的长度。如果它高于任意数字,它们就足够了。
答案 2 :(得分:2)
不是一个具体的答案,但我觉得如果你想让它在一般意义上运作良好,你需要内容意识,即你需要将每个URL分成几个小节:
......并分别处理每个。可接受的模糊程度将控制你需要多少分解URL,但每个部分(我觉得)需要非常具体的检查。协议和域可以是直字符串匹配,但路径也许可以用'/'分割,然后在基本长度检查后,可以逐个比较元素,只比较相同深度的项目(使用直接相等或“改变距离“就像前面提到的Levenshtein距离一样”。通过对“&”的简单分割,可以将查询字符串分解为字典。然后通过“=”,您可以根据需要对其进行排序和比较。这也可以满足@ MarcGravell关于重新排序的查询字符串参数的问题。