【发布时间】:2019-04-14 03:54:31
【问题描述】:
我需要解析一个包含一些以递归方式处理的括号的字符串,但我在确定括号的优先级时遇到了麻烦。 例如,我有字符串
$truth = "((A^¬B)->C)";
我需要返回括号之间的内容。我已经使用以下正则表达式完成了它:
preg_match_all("~\((.*?)\)~", $truth, $str);
但问题是它返回第一个“(”和第一个“)”之间的内容,即
(A^¬B
而不是这个,我需要它“知道”括号正确关闭的位置,以便返回
(A^¬B)->C
如何根据优先顺序返回此内容?谢谢!
【问题讨论】:
-
您可以只创建一个排除组并将括号之外的任何内容与
[^\(\)]*而不是.*匹配,但您可能仍会遇到问题,具体取决于您尝试的表达式的复杂性解析,特别是如果它格式错误。正则表达式很方便,但并不适用于所有解析问题。 -
正则表达式不足以解析语言。尝试解析器生成器。 stackoverflow.com/questions/3720362/…