我有正则表达式的动态(有时更改)数组,例如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 )
如果存在碰撞,则第一个表达式为赢家。例如,最后一个表达式匹配所有内容,但是如果匹配它之前没有表达式。或者/ news / index可以作为文章匹配,但索引在文章表达之前,所以它赢了。
我想构建状态机/表达式树,我可以用它来匹配 O(n)时间内的任何字符串,其中 n < / strong>是字符串的长度匹配,即我不关心构建该树所需的时间,但我希望无论表达式数量多少都具有相同的匹配速度。
或者至少对于“有限”的正则表达式,仅支持:+
,*
,?
,[]
,[^ ]
,()
,$
。
将每个表达式expr
视为不以^
开头,就像它被写为^expr
一样。