我需要检测一个字符串是否包含任何未闭合的尖括号。
我试图通过比较左右括号的数量来避免正则表达式:
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/