【发布时间】: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