脚本宝典收集整理的这篇文章主要介绍了在php中读取类似lua的代码,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
NamE { tITle ( A_STRING ); settings { SetA( 15,15 ); SetB( "test" ); } desc { Desc ( A_STRING ); Cond ( A_STRING ); } }
我想要:
$arr['NAME']['title'] = "A_STRING"; $arr['NAME']['settings']['SetA'] = "15,15"; $arr['NAME']['settings']['SetB'] = "test"; $arr['NAME']['desc']['Desc'] = "A_STRING"; $arr['NAME']['desc']['Cond'] = "A_STRING";
我不知道应该如何开始:/.变量并不总是相同的.
有人能给我一个关于如何解析这样一个文件的提示吗?
谢谢
<PRe> <?PHP $input_str = file_get_contents("in.txt"); print_r(parse_lualike($input_str)); function parse_lualike($str){ $str = preg_replace('/[\n]|[;]/','',$str); preg_match_all('/[a-zA-Z][a-zA-Z0-9_]*|[(]\s*([^)]*)\s*[)]|[{]|[}]/',$str,$matches); $tree = array(); $stack = array(); $pos = 0; $stack[$pos] = &$tree; foreach($matches[0] as $index => $token){ if($token == '{'){ $node = &$stack[$pos]; $node[$ident] = array(); $pos++; $stack[$pos] = &$node[$ident]; }elseif($token=='}'){ unset($stack[$pos]); $pos--; }elseif($token[0] == '('){ $stack[$pos][$ident] = $matches[1][$index]; }else{ $ident = $token; } } return $tree; } ?>
快速解释:第一个preg_replace删除所有换行符和分号,因为它们似乎是多余的.下一部分将输入字符串分成不同的“标记”;名称,括号和之间的关系. print_r $匹配;那里看看它做了什么.
然后只有一个真正的hackish状态机(或读取for循环)通过令牌并将它们添加到树中.它还有一个堆栈,可以构建嵌套树.
请注意,此算法未经过测试.当呈现“现实生活”输入时,它可能会破裂.例如,值内的括号将导致麻烦.另请注意,它不会删除字符串中的引号.我会把这一切留给别人……
但是,正如你所要求的那样,这是一个开始:)
干杯!
Array ( [NAME] => Array ( [title] => A_STRING [settings] => Array ( [SetA] => 15,15 [SetB] => "test" ) [desc] => Array ( [Desc] => A_STRING [Cond] => A_STRING ) ) )
以上是脚本宝典为你收集整理的在php中读取类似lua的代码全部内容,希望文章能够帮你解决在php中读取类似lua的代码所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。