Lex:在多行中分解长正则表达式

时间:2016-01-17 19:58:53

标签: regex syntax syntax-error flex-lexer lex

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

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

word1|word2|word3|word4  ECHO;

当我尝试这样做时:

word1|word2|
word3|word4  ECHO;

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

1 个答案:

答案 0 :(得分:1)

使用flex(作为标准lex语法的扩展),您可以使用(?x:…)语法,类似于PCRE / Perl扩展语法。请注意,与PCRE不同,x标志适用的文本用括号括起来。 [注1]。

在括号内,注释和空格将被忽略,除非它们被转义或引用。所以你可以写:

(?x:
   word1 |
   word2 |
   word3 |
   word4 )    ECHO;

注意:此语法不能在定义部分中使用,仅在规则部分中使用。我不知道这是设计还是未来的某些改进可能会解除限制。

有关详细信息,请参阅flex manual。 (它在开头的部分'(?r-s:pattern)')

注释

  1. 在PCRE(即python)中,您将编写(?x) --- extended regex,并且扩展将一直持续到正则表达式结束,除非您将其关闭。我甚至不想尝试解释Perl用于检测扩展正则表达式结束的规则。