我有动态(有时会更改)正则表达式数组,例如 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
。