【问题标题】: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)’开头的部分)


    注意事项

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

    【讨论】:

    • 再次感谢。这正是我想要的。
    猜你喜欢
    • 2020-12-31
    • 2021-04-17
    • 1970-01-01
    • 2018-02-05
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多