【问题标题】:How to recognize urls with similar patterns in C#?如何在 C# 中识别具有相似模式的 url?
【发布时间】:2012-06-05 10:01:20
【问题描述】:

我需要一种方法来识别具有相似模式的网址,例如匹配时返回 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的合法性,只要看看pattern是否相同即可。 我可能需要一个正则表达式,但不知道该怎么做。任何人都可以帮忙吗?谢谢。

【问题讨论】:

  • http://mysite.com/?param=2&page=456 怎么样 - 这也算吗?
  • @MarcGravell 如果很容易实现它会很有用,但不是绝对必要的。

标签: c# regex string


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 在字符串中找到相同子序列的最佳方法是什么?我想我可以通过字符串中的字符进行遍历。有没有更好的办法?
    • 在野外寻找任何实现,这是一个常见问题。
    【解决方案3】:

    不是一个具体的答案,但我觉得如果你想让它在广义上很好地工作,你需要了解内容,即你需要将每个 URL 分成小节:

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

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

    【讨论】:

      猜你喜欢
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多