PHP:通过匹配打开和关闭标记来检测字符串是否有效


PHP: detect if valid string by matching open and closing tag

我最近在一次面试中遇到了这个问题,我完全不好意思弄清楚。任务是找到一个算法,通过匹配的打开和关闭标记来查看字符串是否有效。因此:

"{This is [an example (of a) valid] string}"

{[()]}检查就是我们要找的。有什么帮助吗?我只能在foreach循环中找到基本的字符串匹配。如果$letter=="{"等,我们会在这里使用regex吗?

您需要的是一个堆栈。

遍历字符串,并在堆栈上推动左大括号。遇到右大括号时,从堆栈中弹出一个值,并检查它是否与左大括号匹配。在字符串的末尾,确保堆栈为空。您可以忽略介于两者之间的所有其他字符。

function isProperlyNested($string) {
    $stack = [];
    foreach (str_split($string) as $c) {
        switch($c) {
            case "(":
            case "[":
            case "{":
                array_push($stack, $c);
                break;
            case ")":
                if (array_pop($stack) != "(")
                    return false;
                break;
            case "]":
                if (array_pop($stack) != "[")
                    return false;
                break;
            case "}":
                if (array_pop($stack) != "{")
                    return false;
                break;
        }
    }
    return count($stack) == 0;
}

但是,如果您想要的是regex解决方案,那么。。。

^(?<p>(?:[^()'[']{}]++|'((?&p)')|'[(?&p)']|'{(?&p)'})*)$

这里有:)