【问题标题】:Can a regular expression itself be parsed with a regular expression? [duplicate]正则表达式本身可以用正则表达式解析吗? [复制]
【发布时间】:2015-11-28 21:14:12
【问题描述】:

我在看一个正则表达式解析器的代码,开始怀疑正则表达式的语法本身是不是正则,可以用另一个(相当复杂的)正则表达式来表达?

rere = "" # the regular expression of regular language
match1 = re.match(rere, "[a-z]+@[a-z]+.com") # True
match2 = re.match(rere, ")az[") # False 

我在正则表达式语法中没有看到任何递归结构,所以我认为这可能是可行的?

如果是,表达式是什么样的? 如果不是,为什么?

【问题讨论】:

  • 没有。您需要上下文无关的语法来解析正则表达式。嵌套括号不能用(理论上的)正则表达式解析。
  • 是的,嵌套括号。我忘记了。但如果我不支持组内组,答案会不会不同?
  • @NeoWang:那你有的比正则表达式弱。即有些语言可以描述正则表达式/正则语法,但不能描述您的语法。
  • 实际上,您可以将嵌套括号与正则表达式匹配,但仅限于某些正则表达式。您的示例代码是 Python,其正则表达式引擎不支持 recursive behavior/balanced constructs。但是,没有神奇的正则表达式可以“全部解析”。
  • @stribizhev:从理论上讲,这些风味并不是严格意义上的“常规”,但如果问题专门针对现实世界的“正则表达式”引擎,那么我想某些风味是可能的。

标签: regex parsing regular-language


【解决方案1】:

您不能使用正则表达式解析嵌套括号,因为这样做需要无限状态。所以答案是否定的。您要查找的内容称为context-free grammars

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多