1

我有动态(有时会更改)正则表达式数组,例如 URL 路径结构:

  • /(home)?$-> 主页视图
  • /news/(index)?$->
  • /news/([a-zA-Z0-9_]+)/?$-> 新闻文章视图( arg_1 )
  • /news/([a-zA-Z0-9_]+)/reply_to_comment\?(.*)-> 新闻评论回复视图( arg 1, arg 2 )
  • /(.+)-> 404 视图( arg 1 )

如果有碰撞,第一个表达式是winner。例如,最后一个表达式匹配所有内容,但以防万一,之前没有表达式匹配它。或者 /news/index 可以匹配为文章,但索引在文章表达式之前,所以它获胜。

我想构建状态机/表达式树,我可以用它来匹配O(n)时间内的任何字符串,其中n是匹配字符串的长度,即我不关心构建该树所需的时间,但是无论表达式的数量如何,我都希望具有相同的匹配速度。

或者至少对于“有限”正则表达式,仅支持:+, *, ?, [], [^ ], (), $. expr将不以 开头的每个表达式^都视为编写为^expr

4

0 回答 0