Lex:将长正则表达式拆分为多行
Lex: Breaking up long regular expressions over multiple lines
在 .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;
注意:此语法不能用于定义部分,只能用于规则部分。我不知道这是否是设计使然,或者未来的某些增强功能是否会解除限制。
有关更多详细信息,请参阅 flex manual。 (它在以‘(?r-s:pattern)’开头的部分)
备注
- 在 PCRE(即 python)中,您可以编写
(?x) --- extended regex
,扩展名会一直持续到正则表达式结束,除非您将其关闭。我什至不会尝试解释 Perl 用来检测扩展正则表达式结尾的规则。
在 .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;
注意:此语法不能用于定义部分,只能用于规则部分。我不知道这是否是设计使然,或者未来的某些增强功能是否会解除限制。
有关更多详细信息,请参阅 flex manual。 (它在以‘(?r-s:pattern)’开头的部分)
备注
- 在 PCRE(即 python)中,您可以编写
(?x) --- extended regex
,扩展名会一直持续到正则表达式结束,除非您将其关闭。我什至不会尝试解释 Perl 用来检测扩展正则表达式结尾的规则。