思路:将字符串内的括号分为前括号和后括号,匹配到前括号则直接存储到数组中,匹配到后括号,则跟之前存储的前括号中最后一个括号进行对比,如果匹配,则删除前括号中的最后一个匹配的括号,如果不匹配,则报错。
<?php
header("Content-type:text/html;charset=utf-8");
$str = '[()()()434()(4232344}(14))]';
$farr = array('(','[','{');
$larr = array(')',']','}');
$tarr = array();
$res = '';
for ($i = 0;$i < strlen($str);$i++){
// 如果字母在数组中
if (in_array($str[$i], $farr)){
$tarr[] = $str[$i];
}
if (in_array($str[$i], $larr)){
$last = end($tarr);
//如果出现一对括号不匹配则报错
if (($last == '(' && $str[$i] == ')') || ($last == '[' && $str[$i] == ']') || ($last == '{' && $str[$i] == '}')){
array_pop($tarr);
}else{
$res = $str[$i];
break;
}
}
}
if ($tarr || $res){
echo $str.'<br>';
echo '括号不匹配<br>错误提示:';
echo $res?$res:end($tarr);
}else{
echo '括号全部匹配';
}
// print_r($res);