C:正则表达式优化|拯救国家

时间:2012-02-10 13:24:05

标签: c regex

假设我想搜索“AAAAAAAABBBBBBB”和“AAAAAAAACCCCCCCCCCC”。 我搜索“(AB | AC)”模式。

搜索“AAAAAAAA”部分然后继续[B ..]和[C ..]部分后,有没有办法保存搜索状态?所以我只需要在[A ..]中搜索一次。

我写了一个简短的伪代码示例,以便更清楚。

第一步:

pattern = "(AB|AC)"
match("AAAAAAAA", pattern)
save_state()
第二步:

match("BBBBBBB", pattern) 

如果匹配“AB”

第三步:

restore_state()
match("CCCCCCCCCCC", pattern) 

应该找到匹配“AC”

1 个答案:

答案 0 :(得分:1)

如果您使用使用(真实)NFA / DFA方法(如RE2)的正则表达式风格,则不必存储某些内容,因为每个输入字符仅(或应该)使用一次(这可能不会变得更好)。

如果您的风味使用回溯算法,您可能会有运气。其中一些引擎允许您使用(?>x)x{1}+(其中{1}可以是任何量词)来引入非回溯(也称为占有)部分

所以在你的情况下,它可能是(如果允许的话)

(?>A)(B|C)

A{1}+(B|C)