解析大括号内的文本,但不要停在内部右括号?

时间:2011-10-18 09:59:27

标签: php regex parsing

例如

function hello(){
    echo 'hello';
    foreach (array(1,2,3) as $n)
    {
        echo $n;
    }
    echo 'bye-bye';
    echo 'bye-bye';
    echo 'bye-bye';
}
function hi(){}

我需要外部花括号之间的所有内容,忽略任何内部花括号,所以我的结果不会像那样

{
    echo 'hello';
    foreach (array(1,2,3) as $n)
    {
        echo $n;
    }

{
    echo 'hello';
    foreach (array(1,2,3) as $n)
    {
        echo $n;
    }
    echo 'bye-bye';
    echo 'bye-bye';
    echo 'bye-bye';
}
function hi(){}

1 个答案:

答案 0 :(得分:1)

在一般情况下,这不适用于正则表达式。您将需要使用为该任务设计的解析器,或者编写您自己的解析器。

对于基本功能,您不需要太多:一次读取一个字符,记住您在任何一个点上有多少未闭合的括号,并在此数字从1减少到0时考虑完成解析。

下一步是识别常见的字符串文字(单引号和双引号)并正确跳过这些字符串中的任何文字括号,这足以让你获得90%的支持。

更新: here's an asnwer类似的问题还包括示例代码(尽管它是用C#而不是PHP)。