繁体   English   中英

如何从正则表达式模式列表中找到最具体的匹配项?

[英]How to find the most specific match from a list of regex patterns?

我有一系列正则表达式模式,并且正在将传入的HttpRequest路径与这些模式匹配。 我想遍历它们并找到最特定的匹配项 (一个URI可能匹配多个正则表达式模式)。

例如, "/static/images/foo.jpg"将与以下三个正则表达式模式匹配:

^/
^/static/images/
^/static/
^/echo/$

如何遍历列表,确定最匹配的匹配项是^/static/images/


为了简单起见,我们假设“最具体”是指从左到右读取的大多数字符或子模式都匹配 我意识到,如果我们引入类似以下正则表达式的内容,“最具体的”将变得模棱两可:

.*\.(jpg|png)$

正如评论中提到的那样,除了手动之外,没有确定的方法可以解决问题。 但是,您可以做一些事情来提出一种半启发式算法,该算法理论上至少可以在您的特定情况下为您提供帮助:

  1. 您可以测试图案的长度。 在示例中,“最长=最具体”,尽管并非总是如此,但它至少可以给出一个主意,
  2. 您可以自己测试模式。 例如- ^/static/适合^/static/images/ ,因此^/static/images/更具体,
  3. 您可以跟踪已经与特定模式匹配的URI数。 URI与模式的匹配越少-它越具体。

您将使用交替。

您可以从左到右扩展特异性。

1-最具体
4-最不明确

(^/static/images/|^/static/|^/|^/echo/$)
         1            2      3     4

如果匹配1,则不会困扰于2,3和4。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM