regex - 匹配空输入的 flex 脚本?

标签 regex string flex-lexer lex

是否可以编写包含一组规则的 lexflex 脚本,其中最大匹配步骤将始终匹配长度为零的字符串?

我问这个是因为正则表达式的数学定义允许正则表达式只匹配零长度字符串。例如,简单的正则表达式 ε 只匹配空字符串。然而,flex pattern documentation似乎不允许您指定这种形式的正则表达式。

最佳答案

我不知道 lex,但是 flex 可以通过使用尾随上下文来匹配空字符串:

""/. { /* handle empty string */ }

这将匹配任何字符之前的空字符串,但它几乎可以是任何模式(参见 flex documentation about limitations)。

<INITIAL>""/[-]{2} { BEGIN(sqlcomment); }
<sqlcomment>[^\n]* { /* Handle sql comment, including -- */ BEGIN(INITIAL); }

如果你想匹配输入的结尾,你必须使用特殊符号<>(参见flex documentation about eof)。

编辑:现在我想多了一点,尾随上下文可能不是强制性的。只是 ""可能有效。如果是这样,我仍然强烈建议在这种情况下尽可能使用尾随上下文。它可以防止格式错误的输入带来的许多副作用,并有助于调试。

关于regex - 匹配空输入的 flex 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432696/

相关文章:

java - 如何获取连字符第一次出现和最后一次出现之间的字符串

javascript - 我需要什么正则表达式来检查一些非拉丁字符?

regex - 使用每个文件中的特定字符串重命名目录中的多个文件

string - MATLAB 将时间打印为字符串

android - 在不重新启动应用程序的情况下更改系统语言时,某些字符串不会被翻译

从 INTEGER 到 int 的代码生成

java - 大括号前面所有文本的正则表达式模式

java - Java 中 LinkedList 元素与字符串的比较

c - 如何设定规则的优先级?

c - _yylval 是一个未解析的外部符号