PHP regexp - 检测未闭合的括号

Kor*_* M. 5 php regex substring

我需要检测一个字符串是否包含任何未闭合的尖括号。

我试图通过比较左右括号的数量来避免正则表达式:

if (substr_count($string, '<') !== substr_count($string, '>'))
{
    // Text contains unclosed angle brackets           
}
Run Code Online (Sandbox Code Playgroud)

但是这种方法不会检测到这样的错误:

This is >b<BOLD>/b< word
Run Code Online (Sandbox Code Playgroud)

Cob*_*ast 5

我不建议在这样的任务中使用正则表达式。
快速编写一个简单的函数来检查字符串是否正确写入括号:

/**
* @param $str input string
* @returns boolean true if all brackets are properly opened and closed, false otherwise
*/
function checkBraces($str)
{
    $strlen = strlen($str); // cache string length for performance
    $openbraces = 0;

    for ($i = 0; $i < $strlen; $i++)
    {
        $c = $str[$i];
        if ($c == '<') // count opening bracket
            $openbraces++;
        if ($c == '>') // count closing bracket
            $openbraces--;

        if ($openbraces < 0) // check for unopened closing brackets
            return false;
    }

    return $openbraces == 0; // check for unclosed open brackets
}
Run Code Online (Sandbox Code Playgroud)

使用此代码作为基础,实施检查以验证左括号和右括号的标记名称是否也匹配应该不会太难 - 但我将把它留给你:-)