如何在PHP中从复杂字符串中获取指令

如何在PHP中从复杂字符串中获取指令,php,xml,string,Php,Xml,String,我有几个字符串序列 <fn>Explode(<ltr>|</ltr>,<fld>SALTEST.ANUNCIO.ID_CIUDAD</fld>,<var>$P[1]</var>)</fn> <fld>SALTEST.ANUNCIO.ESTADO </fld><fld>SALTEST.ANUNCIO.MUNICIPIO </fld><fld>

我有几个字符串序列

<fn>Explode(<ltr>|</ltr>,<fld>SALTEST.ANUNCIO.ID_CIUDAD</fld>,<var>$P[1]</var>)</fn>

<fld>SALTEST.ANUNCIO.ESTADO </fld><fld>SALTEST.ANUNCIO.MUNICIPIO </fld><fld>SALTEST.ANUNCIO.CIUDAD</fld>

 <fld>SALTEST.ANUNCIO.ESTADO</fld><ltr>,</ltr> <fld>SALTEST.ANUNCIO.MUNICIPIO</fld><ltr>,</ltr><fld>SALTEST.ANUNCIO.CIUDAD</fld>
我怎样才能做到这一点


提前感谢

我会避免传递动态变量来创建代码

但是。。。您始终可以这样做:

$sOutputString = str_replace( array( '<fn>', '</fn>', '<ltr>', '</ltr>', '<fld>', '</fld>', '<var>', '</var>' ), '', $sInString );
使用
preg\u match()


注:

1) 我在input中将
Export
更改为
Export
,因为PHP中没有类似Export的函数

2) 我已经初始化了$p[1],但是如果您希望它是一个原始数组,那么首先从输入中匹配$p[1],然后使用正则表达式!(.*)[!匹配数组名称,此处为P。 再次使用regex和match数组索引,然后提取所需的数组,然后将其设置为$var


输出:

请指定您的输入和所需的输出。@VladimirRamik输入是
Explode(|,SALTEST.ANUNCIO.ID_CIUDAD,$p[1])
输出是
Explode(|“,SALTEST.ANUNCIO>ID_CIUDAD,$p[1])
可能重复的bro我怎么能看到这个bro的输出呢?当我打印cmd时,它只显示一个instring,它应该实际向我显示完整的字符串,正如我在问题$cmd($ltr,$fld,$var)中提到的;它将包含explode的输出,即数组。要查看输出,请使用printr($cmd($ltr,$fld,$var));这不是那么简单,兄弟,我正在更新我的问题,请稍候
$sOutputString = str_replace( array( '<fn>', '</fn>', '<ltr>', '</ltr>', '<fld>', '</fld>', '<var>', '</var>' ), '', $sInString );
$sJson = '{"fn":"Explode","ltr":"|","fld":"SALTEST.ANUNCIO.ID_CIUDAD","var":"$P[1]"}';

$aJson[ 'fn' ] = 'Explode';
$aJson[ 'ltr' ] = '|';
$aJson[ 'fld' ] = 'SALTEST.ANUNCIO.ID_CIUDAD';
$aJson[ 'var' ] = '$P[1]';
$sJson = json_encode( $aJson );
var_dump( $sJson );

$aJson = json_decode( $sJson, 1 );
var_dump( $aJson );
<?php
$P[1] = 5;
$i = "<fn>explode(<ltr>|</ltr>,<fld>SALTEST.ANUNCIO.ID_CIUDAD</fld>,<var>$P[1]</var>)</fn>";
preg_match("!<fn>(.*)</fn>!",$i,$fn);
//Matches everything in <fn> block
//$fn[0] contains whole string and $fn[1] contains matched text.

preg_match("!<ltr>(.*)</ltr>!",$fn[1],$ltr);
preg_match("!<fld>(.*)</fld>!",$fn[1],$fld);
preg_match("!<var>(.*)</var>!",$fn[1],$var);
preg_match("!(.*)\(!",$fn[1],$cmd);


$cmd= $cmd[1];
$var=$var[1]+0;
$fld=$fld[1];
$ltr=$ltr[1];
//Execute
$cmd($ltr,$fld,$var);
?>