Php 解释一句话;自定义代码“;使用函数
我正在尝试创建一个自己的代码,以允许客户机在服务器上发布一些内容 下面是一个代码示例:Php 解释一句话;自定义代码“;使用函数,php,api,interpreter,Php,Api,Interpreter,我正在尝试创建一个自己的代码,以允许客户机在服务器上发布一些内容 下面是一个代码示例: 15e3n:3;geo(386299n283752w):4;三角形(16e3n:5;直线(20e0n;20e10n;0e10n;颜色:d);19w55n;矩形(50w50n;高度:100;宽度:50));88e2n:randomColor() 我想用一些函数来解释这一点,比如本例中的geo,delta,line,rectangle,geo,randomColor。在(和)之间写入的内容是参数,用分隔。(15e
15e3n:3;geo(386299n283752w):4;三角形(16e3n:5;直线(20e0n;20e10n;0e10n;颜色:d);19w55n;矩形(50w50n;高度:100;宽度:50));88e2n:randomColor()
我想用一些函数来解释这一点,比如本例中的geo
,delta
,line
,rectangle
,geo
,randomColor
。在(
和)
之间写入的内容是参数,用分隔代码>。(15e3n
在本例中是位置“15东,3北”)
例如:
函数(param1:value1;param2:value2;value3;value4);功能2(参数1:value1)
应执行函数,并用如下结果替换函数:
文本16e13n:3;线条(17e13n;19e13n;颜色:4);15e13n:3
应导致16e13n:3;17e13n:4;18e13n:4;19e13n:4;15e13n:3
。因为函数line
带有参数17e13n;19e13n;颜色:4
有结果17e13n:4;18e13n:4;19e13n:4代码>替换输入中的函数
我怎样才能做到这一点?最好的方法是什么?正则表达式?
有没有关于如何做到这一点的现有示例
现在,这看起来有点复杂:)
我提前感谢你在这方面的帮助 注意:内容不是有效PHP脚本所必需的
我的建议是:
5e3n:3;geo(386299n283752w):4;delta(16e3n:5;line(20e0n;20e10n;0e10n;color:d);19w55n;rectangle(50w50n;height:100;width:50));88e2n:randomColor()
首先实现一个解析器,将语句分隔成一个数组。您可以循环每个字符,保持括号计数器并按拆分代码>位于括号外,生成此数组:
array(
0 => object(prefix => "5e3n", suffix => "3"),
1 => object(prefix => "geo(386299n283752w)", suffix => "4"),
2 => object(prefix => "delta(16e3n:5;line(20e0n;20e10n;0e10n;color:d);19w55n;rectangle(50w50n;height:100;width:50))", suffix => ""),
3 => object(prefix => "88e2n", suffix => "randomColor()")
)
然后提取函数参数,您可能需要使用对象
array(
0 => object(prefix => "5e3n", suffix => "3"),
1 => object(
prefix => (object)func(
name => "geo",
params => array(
0 => "386299n283752w"
)
),
suffix => "4"),
),
2 => object(
prefix => (object)func(
name => "delta",
params => array(
0 => "16e3n:5",
1 => "line(20e0n;20e10n;0e10n;color:d)",
2 => "19w55n",
3 => "rectangle(50w50n;height:100;width:50)"
)
),
suffix => ""
),
3 => object(
prefix => "88e2n",
suffix => (object)func(
name => "randomColor",
params => array()
)
)
)
递归地执行此操作,直到提取内部的所有函数
然后从深度开始,通过将(object)func
块替换为结果字符串,通过根据名称执行适当操作的开关
块来处理函数,例如:
function processFunc($func){
switch($func->name){
case "randomColor":
return selectRandomColor();
/* ... */
}
}
将处理此问题:
(object)func(
name => "randomColor",
params => array()
)
为此:
"blueColor"
最后,您将得到一个包含以下内容的数组,例如(不直接匹配上面的内容):
然后将它们重新组合成一个结果字符串
我不打算为你写一个完整的脚本,但这里有一个如何处理它的想法。虽然这可能不完整,但仔细想想,您应该能够完成它。+1详细解释!谢谢;)我将在代码中实现这一点。
array(
0 => object(prefix => "5e3n", suffix => "3"),
1 => object(prefix => "6e2n", suffix => "4"),
2 => object(prefix => "88e2n", suffix => "")
)