给出一整段文字:
欢迎来到[[[[RegExr v2.0 by gskinner.com]]]
编辑表达式&要查看匹配项的文字。滚动比赛或 表达细节。使用ctrl-z撤消错误。保存&分享 与朋友或社区的表达。 [[[完整的参考文献&帮助就是 可在图书馆中找到,或观看视频教程。
]]测试的示例文本:abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 _ + - 。,!@#$%^& *(); / |<>"' 12345 -98.7 3.141 .6180 9,000 +42 555.123.4567 + 1-(800)-555-2468 foo@demo.net bar.ba@test.co.uk www.demo.com
我需要一个正则表达式,可以验证所有打开的三方括号' [[['在字符串中配对并关闭']]]'。嵌套括号和以']]开头的字符串'或以' [[['应该返回false。
我知道有很多方法可以遍历字符串并对其进行评估,但我可能会处理非常大的文本字符串,并且希望正则表达式能够更快/更好地提升性能。
感谢。
答案 0 :(得分:1)
我使用模式/[\[]{3}[^\[\]]*[\]]{3}/
提出了以下解决方案。不幸的是,第三个$text
案例仍然会返回false,所以我正在研究它。可以在行动here中看到正则表达式模式。
$text = 'Some [[[default]]] [[[text]]] here'; //valid
//$text = 'Some [[[default text [[[here]]]'; //invalid
//$text = 'Some [[[default text [here]]]'; //invalid
// Get the number of opening and closing brackets
$open_bracket_count = substr_count($text, '[[[');
$close_bracket_count = substr_count($text, ']]]');
// Check if number of '[[[' is same as ']]]'
if ($open_bracket_count === $close_bracket_count)
{
// Match valid bracketed substrings in the text
$validation_pattern = '/[\[]{3}[^\[\]]*[\]]{3}/';
$valid_match_count = preg_match_all($validation_pattern, $text, $valid_matches);
// Valid matches should equal the number of substrings attempting to be wrapped in brackets
if ($valid_match_count === $open_bracket_count)
{
return true;
}
else
{
return false;
}
}
// If not equal, we know right away the string contains invalid brackets
else
{
return false;
}