在.l文件中的多行上打破长lex正则表达式的正确语法是什么。
例如,假设我有一个正则表达式:
word1|word2|word3|word4 ECHO;
当我尝试这样做时:
word1|word2|
word3|word4 ECHO;
我收到错误。在lex中多行分解正则表达式的正确方法是什么?
答案 0 :(得分:1)
使用flex(作为标准lex语法的扩展),您可以使用(?x:…)
语法,类似于PCRE / Perl扩展语法。请注意,与PCRE不同,x标志适用的文本用括号括起来。 [注1]。
在括号内,注释和空格将被忽略,除非它们被转义或引用。所以你可以写:
(?x:
word1 |
word2 |
word3 |
word4 ) ECHO;
注意:此语法不能在定义部分中使用,仅在规则部分中使用。我不知道这是设计还是未来的某些改进可能会解除限制。
有关详细信息,请参阅flex manual。 (它在开头的部分'(?r-s:pattern)')
(?x) --- extended regex
,并且扩展将一直持续到正则表达式结束,除非您将其关闭。我甚至不想尝试解释Perl用于检测扩展正则表达式结束的规则。