假设我想搜索“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”
答案 0 :(得分:1)
如果您使用使用(真实)NFA / DFA方法(如RE2)的正则表达式风格,则不必存储某些内容,因为每个输入字符仅(或应该)使用一次(这可能不会变得更好)。
如果您的风味使用回溯算法,您可能会有运气。其中一些引擎允许您使用(?>x)
或x{1}+
(其中{1}
可以是任何量词)来引入非回溯(也称为占有)部分
所以在你的情况下,它可能是(如果允许的话)
(?>A)(B|C)
或
A{1}+(B|C)