【问题标题】:Lex: Breaking up long regular expressions over multiple linesLex:将长正则表达式拆分为多行
【发布时间】:2016-01-17 19:58:52
【问题描述】:
在 .l 文件中将长 lex 正则表达式拆分为多行的正确语法是什么。
例如,假设我有一个像这样的正则表达式:
word1|word2|word3|word4 ECHO;
当我尝试这样做时:
word1|word2|
word3|word4 ECHO;
我得到一个错误。在 lex 中将正则表达式拆分为多行的正确方法是什么?
【问题讨论】:
标签:
regex
syntax
syntax-error
flex-lexer
lex
【解决方案1】:
使用 flex(作为标准 lex 语法的扩展),您可以使用 (?x:…) 语法,类似于 PCRE/Perl 扩展语法。请注意,与 PCRE 不同,应用 x 标志的文本用括号括起来。 [注1]。
在括号内,cmets 和空格将被忽略,除非它们被转义或引用。所以你可以写:
(?x:
word1 |
word2 |
word3 |
word4 ) ECHO;
注意:此语法不能在定义部分使用,只能在规则部分使用。我不知道这是否是设计使然,或者未来的某些增强功能是否会解除限制。
有关更多详细信息,请参阅flex manual。 (它在以‘(?r-s:pattern)’开头的部分)
注意事项
- 在 PCRE(即 python)中,您将编写
(?x) --- extended regex,并且扩展将持续到正则表达式的末尾,除非您将其关闭。我什至不会尝试解释 Perl 用于检测扩展正则表达式结尾的规则。