【问题标题】:what is symbol s in flex regular expressionflex 正则表达式中的 symbol 是什么
【发布时间】:2016-11-20 08:31:17
【问题描述】:

我正在尝试从遗留代码中理解 flex 规则,你能帮忙吗:

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

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

你能举一些例子,这两条正则表达式会匹配吗?

【问题讨论】:

    标签: bison flex-lexer


    【解决方案1】:

    Flex 模式记录在manual

    • s 只匹配字母“s”

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

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

    【讨论】:

      【解决方案2】:
      1. 我认为双撇号只是一个错误。括号定义了一个字符集,撇号没有特殊含义。括号内的双撇号的意思就是一个字符集只包含一个撇号的意思,这相当于只有一个撇号。
      2. 字母字符的含义就是字符。因此,s 仅表示s。后缀的问号使其可选。

      因此,您的表达式应该等价于

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

      【讨论】:

      • 感谢您的回答。另一个答案类似但更详细,所以我接受了。
      猜你喜欢
      • 1970-01-01
      • 2011-06-15
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多