如何从正则表达式数组构建字符串匹配树?

时间:2014-11-14 10:26:48

标签: c regex automata search-tree

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

0 个答案:

没有答案