首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -使用regex解析模板变量

PHP -使用regex解析模板变量
EN

Stack Overflow用户
提问于 2010-09-05 21:37:09
回答 3查看 1.1K关注 0票数 0

我必须解析这个模板文件($html):

代码语言:javascript
复制
{$myFirstVariable}
{$myMainVar:MYF1,"x\:x\,x",2:MYF2:MYF3,false}
{$myLastVariable:trim}

下面是我的php解析器:

代码语言:javascript
复制
$regexp = '#{\$(?<name>.+?)(\:(?<modifiers>.+?))?}#';

preg_replace_callback($regexp, 'separateVariable', $html);

function separateVariable($matches) {
    $varname = $matches['name'];

    print $varname."\n";

    if (isset($matches['modifiers'])) {
        $modifiers = $matches['modifiers'];

        $modifiers = preg_split('#(?<!\\\):#', $modifiers);
        $parsed = array();

        foreach ($modifiers as $modifier) {
            $modifier = preg_split('#(?<!\\\),#', $modifier);
            $parsed[array_shift($modifier)] = $modifier;
        }

        // parsed[myFuncName] = Array(2ndArg, 3rdArg)

        print_r($parsed);
    }

    print "\n";
}

除了我必须用'\‘转义{$myMainVar:...}中的':’和',‘之外,其他都有效。

你有什么办法让我从'\‘中解脱出来吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-05 21:44:19

正则表达式不能返回嵌套数组,而且,您尝试的似乎更多的是文本处理(substrexplode..)而不是使用正则表达式。此外,您的示例没有清楚地说明输入的标准处理是如何工作的。

我建议:构建一个处理unserialiing流程逻辑的递归函数,该函数将使用switch cases和string manipulation functions

票数 0
EN

Stack Overflow用户

发布于 2010-09-05 21:41:49

正则表达式在这方面帮不了你太多,因为数据有多个层次。首先按:拆分数据,然后解析结果可能更容易(即现在按,拆分substr,1,2 )。问题是你需要多个正则表达式。正则表达式不返回数组,也不进行多维匹配;它们用于从预先知道格式的数据中解析字段。

票数 0
EN

Stack Overflow用户

发布于 2010-09-06 02:10:17

如果它对你有帮助:

代码语言:javascript
复制
$string = '{$myVariable:trim:substr,1,2}';

if (preg_match("#^\{\\$([a-zA-Z]+)\:([a-z]+)\:([a-z]+)\,([0-9]+)\,([0-9]+)\}$#", $string, $m)){
$result = <<<RESULT
Array (
    "{$m[1]}",
    Array (
        "{$m[2]}" => Array(),
        "{$m[3]}" => Array(
            {$m[4]},
            {$m[5]}
        )
    )
)
RESULT;
}
echo $result;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3646229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档