在.l文件中的多行上打破长lex正则表达式的正确语法是什么?

例如,说我有一个正则表达式,例如:

word1|word2|word3|word4  ECHO;

当我尝试这样做时:
word1|word2|
word3|word4  ECHO;

我得到一个错误。在lex的多行中分解正则表达式的正确方法是什么?

最佳答案

通过flex(作为标准lex语法的扩展),您可以使用(?x:…)语法,类似于PCRE/Perl扩展语法。请注意,与PCRE不同,x标志所应用的文本用括号括起来。 [注1]。
在括号内,注释和空格将被忽略,除非将其转义或引用。所以你可以这样写:

(?x:
   word1 |
   word2 |
   word3 |
   word4 )    ECHO;
注意:此语法不能在“定义”部分中使用,只能在“规则”部分中使用。我不知道这是设计使然,还是 future 的增强功能可能会解除限制。
有关更多详细信息,请参见flex manual。 (在以“(?r-s:pattern)”开头的部分中)

笔记
  • 在PCRE(即python)中,您将编写(?x) --- extended regex,并且扩展将一直持续到正则表达式的末尾,除非您将其关闭。我什至不会尝试解释Perl用于检测扩展正则表达式结尾的规则。
  • 09-08 11:11