为Flex设置规则,警告:“规则无法匹配”

时间:2012-11-01 13:43:18

标签: regex lexical-analysis flex-lexer

我有这些弹性规则:

^User-Agent: [^\n]*Firefox {useragent = TFIREFOX; }
^User-Agent: [^\n]*MSIE {useragent = TMSIE; }
^User-Agent: [^\n]*Opera {useragent = TOPERA; }
^User-Agent: [^\n]*Safari {guseragent = TSAFARI; }
...

我在第一条规则之后的所有行上收到警告:rule cannot be matched。我希望第一条规则只匹配线条,其中包含“Firefox”,但我认为我错了。如何修复这些规则?我阅读flex manpage,我仍然无助。

1 个答案:

答案 0 :(得分:2)

我认为这里的问题是flex使用空格来分隔令牌以进行正则表达式匹配。因此,当它解析您的文件时,它会将“^ User-Agent:”之后的所有内容视为操作的一部分。你可以通过逃避空间来完成这项工作:

^User-Agent:\ [^\n]*Firefox
^User-Agent:\ [^\n]*MSIE
^User-Agent:\ [^\n]*Opera
^User-Agent:\ [^\n]*Safari

我用flex 2.5.35测试过,会做你想做的事。