我需要检测一个字符串是否包含任何未闭合的尖括号.
我试图通过比较左右括号的数字来避免正则表达式:
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
}
使用此代码作为基础,实现检查以验证开始和结束括号的标记名称是否也匹配应该不会太难 – 但我会留给您:-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。