我必须解析这个模板文件($html):
{$myFirstVariable}
{$myMainVar:MYF1,"x\:x\,x",2:MYF2:MYF3,false}
{$myLastVariable:trim}下面是我的php解析器:
$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:...}中的':’和',‘之外,其他都有效。
你有什么办法让我从'\‘中解脱出来吗?
谢谢。
发布于 2010-09-05 21:44:19
正则表达式不能返回嵌套数组,而且,您尝试的似乎更多的是文本处理(substr,explode..)而不是使用正则表达式。此外,您的示例没有清楚地说明输入的标准处理是如何工作的。
我建议:构建一个处理unserialiing流程逻辑的递归函数,该函数将使用switch cases和string manipulation functions。
发布于 2010-09-05 21:41:49
正则表达式在这方面帮不了你太多,因为数据有多个层次。首先按:拆分数据,然后解析结果可能更容易(即现在按,拆分substr,1,2 )。问题是你需要多个正则表达式。正则表达式不返回数组,也不进行多维匹配;它们用于从预先知道格式的数据中解析字段。
发布于 2010-09-06 02:10:17
如果它对你有帮助:
$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;https://stackoverflow.com/questions/3646229
复制相似问题