什么是flex正则表达式中的符号s

时间:2016-11-20 08:31:17

标签: bison flex-lexer

我正在尝试从遗留代码中了解flex规则,您可以提供帮助:

number  [0-9]*['']s?[bdh]
  1. ''(两个单引号)是什么意思?这是否意味着单引号,其中第一个引号符号是后面提到的实际引用的转义?我的印象是特殊字符需要用反斜杠标记,如[\']。如果''表示',那么使用反斜杠作为转义字符的正确方法是什么?

  2. “s”符号在这里意味着什么?

  3. 你能给出一些例子,这两个正则表达式会匹配吗?

2 个答案:

答案 0 :(得分:1)

  1. 我认为双撇号只是一个错误。括号定义了一个字符集,撇号没有特殊的含义。括号内的双撇号的含义只是包含一个撇号的字符集的含义,这相当于只有一个撇号。
  2. 字母字符的含义就是字符。因此,s仅表示s。带后缀的问号使其成为可选项。
  3. 因此,你的表达式应该等同于

    number  [0-9]*'s?[bdh]
    

答案 1 :(得分:1)

manual中记录了Flex模式。

  • s只是匹配字母" s"

  • 括号内的一系列字符,如[bdh],是一个字符类。它匹配单个字符,该字符是类中的任何一个字符。在角色类中使用时,大多数角色都会失去特殊含义。

  • '在弹性模式中没有特殊含义;像s一样,它只是匹配自己。并且在字符类中重复一个字符无效。因此['']匹配单个撇号,它可以简单地写为'。但是,许多程序员的编辑认为撇号用于包围字符串或字符文字,单个撇号会导致语法高亮失败。写['']是避免这种误解的一种方法。 (就我个人而言,我认为找到一个好的编辑器而不是修改你的代码以补偿一个愚蠢的编辑器会更好,但口味不同。)