【发布时间】:2014-05-25 20:19:22
【问题描述】:
考虑字符串
cos(t(2))+t(51)
使用正则表达式,我想匹配cos(t(2))、t(2) 和t(51)。这适合的一般模式旨在类似于
variable or function name + opening_parenthesis + contents + closing_parenthesis,
其中contents 可以是任何具有相同数量的左括号和右括号的表达式。
我使用的是[a-zA-Z]+\([\W\w]*\),它返回cos(t(2)))+t(51),这当然不是我们想要的结果。
关于如何使用正则表达式实现这一点的任何想法?我特别纠结于“开括号和右括号的数量相等”。
【问题讨论】:
-
简答:正则表达式无法做到这一点。
-
稍微长一点的答案:如果你想处理任意嵌套,你需要使用专用的解析器。
-
正则表达式匹配不能用于统计任意数量的匹配表达式(即平衡表达式)。其原因是基于自动机(语言理论),它基本上表明您尝试匹配的语言(即平衡括号)无法匹配,因为它不是“常规”。不过,您可以使用堆栈/解析器。
-
一些方言(例如 php/pcre)支持能够匹配嵌套括号的递归模式。你的平台是什么?
-
@niels:不知道,但也许this 有帮助。
标签: regex matlab recursion nested