在.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)”开头的部分中)
笔记
(?x) --- extended regex
,并且扩展将一直持续到正则表达式的末尾,除非您将其关闭。我什至不会尝试解释Perl用于检测扩展正则表达式结尾的规则。