我需要在lex (flex 2.5.35)中使用正向回顾断言。经过调查文档,我没有找到直接实现这一点的方法。它有类似于前瞻断言的东西(r/s语法),但没有后顾断言。如何以最佳方式实现相同的效果?
这里是一个例子:假设我在扫描器规范文件中有以下规则:
a printf("matched a ");
b printf("matched b ");
c printf("matched c ");
d printf("matched d ");
如何匹配跟在'b'后面的'd'和'b'本身,使得输入'abd'时我可以得到:
matched a matched b matched d following b
但是对于字符串 'acd'
matched a matched c matched d
规则如下:
bd printf("matched d following b ");
显然这种方法行不通,因为它会消耗b;对于'abd',它输出:
matched a matched d following b
如果我有pcre lookbehinds,我可以这样写:
(?<=b)d printf("matched d following b ");
如果所有都很好,但是Lex不支持这种操作。