【问题标题】:Unable to fugure out the Regular Expression of the following无法弄清楚以下的正则表达式
【发布时间】:2021-05-18 08:56:21
【问题描述】:

我最近一直在从事编译器设计工作,发现正则表达式相当棘手。 所以我正在制作一个我需要词法规范的词法分析器。

我无法弄清楚标识符的 RE(规则定义如下):

  • 最多 4 个字符
  • 至少 1 个字母

我已经尝试过的:

(letter|digit){4} // 我读到我们可以限制这样的发生。但在这种情况下,11aa 也会被接受。

我想我也可以这样重写上面的语句。

(字母|数字)(字母|数字)(字母|数字)(字母|数字)

如有错误请指正,提前谢谢!

【问题讨论】:

  • 提示: 1. 如果我们要求第一个字符是字母,RE 会是什么? 2. 你能把它概括成四个位置中的任何一个吗?
  • @ivan_onys 我相信如果我们要求第一个字符是字母,那么 RE 将类似于:(letter)(letter|digit)
  • (字母)(字母|数字){,3} | (字母|数字)(字母)(字母|数字){,2} | ...这似乎是一个解决方案?
  • @ivan_onys 非常感谢朋友。请在答案框中提及,我会接受您的解决方案。因为,它对我有用。

标签: regex compiler-construction regular-language automata


【解决方案1】:

这项任务的棘手之处在于确保我们至少有一个字母。 那个字母可以在四个位置中的任何一个。

(letter)(letter|digit){0,3} | (letter|digit)(letter)(letter|digit){0,2} | (letter|digit){2}(letter)(letter|digit){0,1} | (letter|digit){3}(letter)  

【讨论】:

    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 2013-12-16
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多