【问题标题】:Converting EBNF to Regular Expression将 EBNF 转换为正则表达式
【发布时间】:2016-11-14 14:48:19
【问题描述】:

我需要将以下 EBNF 转换为匹配任何有效格式字符串的正则表达式。例如'

<spec> -> :[[<fill>]<align>][<sign>][<width>][,][.<prec>]
<fill> -> <character> (* i.e., any one character)
<align> -> < | > | = | ^
<sign> -> + | - | ' '
<width> -> <integer> (* i.e, one or more digits 0....9  *)
<prec> -> <integer>

【问题讨论】:

  • 向我们展示您的尝试

标签: regex bnf ebnf


【解决方案1】:

如果正则表达式引擎支持命名捕获组(例如 PCRE),那么这可以工作:

^((?<fill>.?)(?<align>[<>=^]))?(?<sign>[ +\-]?)(?<width>[0-9]+)[,]?(?:[.](?<prec>[0-9]+))?$

测试here

请注意,大多数是可选的,“宽度”捕获组除外。这是基于“宽度”存在于所有示例中这一事实的假设。

使用未命名的捕获组,正则表达式变得更短:

^((.?)([<>=^]))?([ +\-]?)([0-9]+)[,]?(?:[.]([0-9]+))?$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 2016-04-02
    • 1970-01-01
    • 2019-05-11
    • 2014-11-08
    • 2017-12-29
    • 2023-03-09
    相关资源
    最近更新 更多