PHP 正则表达式 - 检测未闭合的括号

标签 php regex substring

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

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

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

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

This is >b<BOLD>/b< word

最佳答案

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

/**
* @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
}

以这段代码为基础,执行检查以验证左括号和右括号的标签名称是否也匹配应该不会太难 - 但我会把它留给你:-)

关于PHP 正则表达式 - 检测未闭合的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575257/

相关文章:

PHP/MySql 错误 : Field doesn't exist, 但确实如此

php - 显示数据库中存储的图像

php - 如何从 Smarty 模板构建新对象?

php - mysql错误资源id#5

python - 为什么 python 正则表达式会在 Linux 而不是 Windows 上编译?

javascript - 在 JavaScript 中获取反斜杠 (\) 后的字符串值

java - 用包含原始子字符串的条件子字符串替换多次出现的子字符串

c++ - 正则表达式库在 C++ 中无法正常工作

C# - 正则表达式 - ArgumentException

blob - informix 中对 blob 数据的操作