【问题标题】:Create DFA for the regular expression of a real number?为实数的正则表达式创建 DFA?
【发布时间】:2018-02-05 18:25:56
【问题描述】:

我正在尝试构建实数的定有限自动机(DFA),定义为:

  • 以可选的“+”或“-”开头的字符串。
  • 后跟单个零或不以零开头的非空数字序列。
  • 后跟小数点。
  • 后跟非空数字序列

它的结束取决于数字是否真实。

我构造了正则表达式:/[+ | -]?(O | ([1-9][0-9]*)).[0-9]+/

【问题讨论】:

  • 有什么问题?您的代码与预期输出有何不同?
  • 我总是发现online regex testers 在构造/测试/调试正则表达式时很有帮助。例如:regex101.com
  • 是否有特殊的测试用例导致您的表达式失败?您能否提供一些您希望通过的测试字符串?
  • 从这个常规异常中我想绘制 DFA。我该怎么做?
  • i.ytimg.com/vi/IE4LcyIfGOk/maxresdefault.jpg 类似的事情我必须考虑。

标签: regex dfa


【解决方案1】:

See regex in use here

^[+-]?(?:0|[1-9]\d*)(?:\.\d+)?$
  • ^ 在行首断言位置
  • [+-]? 可以选择匹配 +-
  • (?:0|[1-9]\d*) 匹配 0 或以 1-9 范围内的数字开头的数字,后跟任意数字中的任意数字
  • (?:\.\d+)? 可选择匹配小数点数字(点 .,后跟一位或多位数字)
  • $在行尾断言位置

【讨论】:

    【解决方案2】:

    这里,开始状态是q0

    最终状态是q5

    如果提供标志,DFA 进入状态 q1

    如果第一个数字为 0,则达到状态 q2

    如果第一个数字不是 0,则状态 q3 并保持该状态以获取更多数字,直到看到小数点。

    状态 q4 到达小数点,如果看到一个数字,则从那里转换到状态 q5

    不显示死亡状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 2017-02-09
      • 2018-04-16
      • 2015-07-15
      • 1970-01-01
      • 2017-10-04
      相关资源
      最近更新 更多