将嵌套文本转换为字符串

3

目前我正在使用PHP,但我认为还有其他编程语言可以更好地处理这个问题。如果您有任何关于其他可能更适合的编程语言的建议,请告诉我。

我正在尝试将嵌套文本转换为单独的字符串。 由于英语不是我的母语,所以很难解释,因此我将写一个示例来说明我要完成的内容。

原始数据:

foo {
    bar tree;
    bar ball/sand;
    snafu {
        string;
    }
    random {
        nested {
            value;
            bohica;
        }
    }
}

目标:

foo bar tree
foo bar ball/sand
foo snafu string
foo random nested value
foo random nested bohica

目前为止,我最好的尝试:

foreach($curlybrace as $stance){
    $semicolon = explode(';',$string);
    foreach($semicolon as $break){
        $result = 'set ' . $curlybrace[0] . $break .'<br />';
        echo $result . '<br />';
    }
}

在我的代码中,我尝试使用了几个PHP函数,如str_replacetrimpreg_replacepreg_splitimplodeexplode来修改结果,并删除留下的花括号,但我无法使其正常工作。
非常感谢任何关于如何使其正常工作的提示和帮助。

那数据是由什么产生的? - Jessica
1个回答

3
这段代码会逐个字符遍历数组。它会根据 {}, 来决定是向上还是向下移动一步,或者是否需要打印实际字符串。请注意,保留了 HTML 标签。
$buf = "";
$brace_level = 0;
$words = array();
for ($i = 0; $i < strlen($text); $i++) {
    switch ($text[$i]) {
        case '{':
            $words[$brace_level] = trim($buf);
            $buf = "";
            $brace_level++;
            break;
        case '}':
            unset($words[$brace_level]);
            $brace_level--;
            unset($words[$brace_level]);
            break;
        case ';':
            $words[$brace_level] = trim($buf);
            $buf = "";
            print implode(" ", $words)."\n";
            break;
        default:
            $buf .= $text[$i];
    }
}

Online demo


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接