php - PHP中的匹配括号
问题描述
我想使用 php 查找括号字符串是否匹配。所以我写了这个。
<?php
function Parenthesis($string) {
$ok = preg_match('~(\((?1)*+\)|\[(?1)*+]|{(?1)*+})*\z~A', $string);
if ($ok==1) {
return "true";
} else {
return "false";
}
}
$entree = "{([]){}()}";
$sortie = Parenthesis($entree);
echo "Réponse : ".$sortie;
它给了true
.
但是当我通过$entree = "{C{}[{[a]}RqhL]{y2}}";
它时,它给出了错误,同时我需要真实。我该如何修改代码。
解决方案
通过一次解析一个字符并维护一堆左括号,这可能更容易(也更可靠)完成。当看到右括号时,堆栈的顶部(最后看到的左括号)被弹出以验证它是否与右括号匹配。如果堆栈为空,或者括号不匹配,我们返回 false。解析完所有字符后,堆栈为空表示匹配。
function Parenthesis($string) {
$opening = array('}' => '{', ']' => '[', ')' => '(');
$parens = array();
foreach (str_split($string) as $char) {
switch ($char) {
case '{':
case '[':
case '(':
$parens[] = $char;
break;
case '}':
case ']':
case ')':
if (!count($parens) || array_pop($parens) != $opening[$char]) return false;
break;
default:
break;
}
}
return count($parens) === 0;
}
function check_balanced($string) {
echo "$string is " . (Parenthesis($string) ? '' : 'not ') . "balanced\n";
}
check_balanced("{([]){}()}");
check_balanced("{C{}[{[a]}RqhL]{y2}}");
check_balanced("{([]){]()}");
输出:
{([]){}()} is balanced
{C{}[{[a]}RqhL]{y2}} is balanced
{([]){]()} is not balanced
推荐阅读
- python - 必需的位置参数:'self'
- button - 在godot中单击按钮时如何生成一个窗口?
- bash - shell / bash 中的 `<( )` 语法是什么,如何搜索它?
- visual-studio-code - Visual Studio Code 滚动键入光标
- python - Python:根据用户输入创建具有两部分递增名称的新文件
- python - 如何使用python删除公式并仅在单元格中保留值
- spring-boot - 带有 Spring Boot 集成问题的 OpenApi/Swagger
- ads - 为什么我的 Google 广告会在我排除的国家/地区展示?
- c++ - C++ | 用同一类绘制不同的敌人?有继承
- spring-boot - JWT 令牌和刷新令牌的合理到期日期是什么?