验证数学公式(带有匹配括号的数学表达式)的正则表达式?

5

我已经使用过正则表达式很多次,但远未达到专家级别。这次我想通过正则表达式验证一个公式(或数学表达式)。难点在于验证公式中正确的起始和结束括号。
我相信在网上会有一些示例,但我找不到。有人可以发布这样的链接吗?或者通过其他方式帮助我?

2个回答

5
具有匹配嵌套括号的语言不是正则语言,因此不能被正则表达式识别。一些正则表达式实现(例如.NET框架中的实现)具有处理此类情况的扩展功能,但使用起来真的很麻烦。因此,我建议使用可用的解析器或自己实现一个简单的解析器(出于乐趣而为)。有关.NET实现中的扩展,请参见MSDN on balancing groups

我想在 XML schema 中使用这个 RegExp 作为模式来验证属性值。您有什么建议吗? - WSK
“但这真的不好玩!”这话太谦虚了!试图剖析这样的怪物简直是一场噩梦!:) - Bart Kiers
如果你想使用XML领域中可用的工具,可以尝试使用XSLT。XSLT是一种图灵完备语言,因此能够完成这项工作,但我无法确切地告诉你需要多少努力以及结果是否会是一个好的代码片段。 - Daniel Brückner

3
如果您的数学表达式涉及匹配的嵌套括号,那么它不是一个正则语法而是上下文无关的语法,因此不能使用正则表达式进行解析。

+1,你说出了我的心声。虽然回溯算法可以接近解决问题,但它有限制,而且坦率地说,这是一种hack方法,也是使用错误工具的标志。 - Daniel Papasian
更好的表述:不支持递归匹配的正则表达式实现无法解析此内容(Perl、PHP和.NET可以)。 - Bart Kiers
@Bart - 他没有指定语言,所以我猜这是一个标准的正则表达式,而不是Perl的。 - DVK
当然,但正如我所说:这不仅仅是Perl,还有其他语言。此外,大多数正则表达式实现都支持前瞻,这会导致它们解析/识别比常规语言更多的内容。 - Bart Kiers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接