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

what is symbol s in flex regular expression

我想从遗留代码中理解弹性规则,你能帮忙吗:

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

  2. 这里的"s"符号是什么意思?

你能举例说明这两个正则表达式匹配的地方吗?

  1. 我认为双撇号只是一个错误。括号定义一个字符集,撇号没有特殊含义。括号内的双撇号的意思就是一个字符集只包含一个撇号的意思,相当于只有一个撇号。
  2. 字母字符的含义就是字符。因此,s 就意味着 s。后缀的问号使其成为可选的。

因此,你的表达式应该等同于

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

Flex 模式记录在 manual

  • s 正好匹配字母 "s"

  • 括号内的字符序列,如[bdh],是一个字符class。它匹配单个字符,该字符是 class 中的任何一个字符。大多数字符在字符 class.

  • 内使用时会失去其特殊含义
  • ' 在弹性模式中没有特殊意义;比如s,就是匹配自己。并且在字符 class 中重复一个字符没有任何效果。所以 [''] 匹配单个撇号,它可以简单地写成 '。然而,许多程序员的编辑认为撇号是用来包围字符串或字符文字的,单个撇号会导致语法突出显示失败。写 [''] 是避免这种误解的一种方法。 (我个人认为找一个好的编辑器比修改你的代码来弥补一个愚蠢的编辑器更好,但是口味不同。)