是否可以编写包含一组规则的 lex
或 flex
脚本,其中最大匹配步骤将始终匹配长度为零的字符串?
我问这个是因为正则表达式的数学定义允许正则表达式只匹配零长度字符串。例如,简单的正则表达式 ε 只匹配空字符串。然而,flex pattern documentation似乎不允许您指定这种形式的正则表达式。
最佳答案
我不知道 lex,但是 flex 可以通过使用尾随上下文来匹配空字符串:
""/. { /* handle empty string */ }
这将匹配任何字符之前的空字符串,但它几乎可以是任何模式(参见 flex documentation about limitations)。
<INITIAL>""/[-]{2} { BEGIN(sqlcomment); }
<sqlcomment>[^\n]* { /* Handle sql comment, including -- */ BEGIN(INITIAL); }
如果你想匹配输入的结尾,你必须使用特殊符号<
编辑:现在我想多了一点,尾随上下文可能不是强制性的。只是 ""可能有效。如果是这样,我仍然强烈建议在这种情况下尽可能使用尾随上下文。它可以防止格式错误的输入带来的许多副作用,并有助于调试。
关于regex - 匹配空输入的 flex 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432696/