我有一个字符串,它包含纯文本"var-X“的各种实例,其中X可以是任何正整数。我不知道在任何给定的脚本中X能达到多高(但是,如果需要的话,我可以得到它)。
这些var-X中的每一个都必须由不同的字符串计算和替换。不同字符串的值取决于一个外部xml文件,我对该文件的解析没有问题。
所以,我的问题是,我该怎么做
$str = "Hey I am some text,[var-1] a lot of these [var-3] parts will have to [var-9] go away and
be exchanged [var-2] by others";另外(假设这些东西在一个更大的xml中)
(some xml...)
<Variation id="1">really</Variation>
<Variation id="2">quickly</Variation>
<Variation id="3">strange</Variation>
(some other xml...)
<Variation id="9">definitely</Variation>
(more xml...)至
$str = "Hey, I am some text, really a lot of these strange parts will have to definitely go away
and be exchanged quickly by others";首先迭代我的xml,找出整数的大小,然后再用字符串上的strpos进行迭代,这是最好的方法吗?
我如何处理我可能找到var-7和var-72这一事实?
这能用一个正则表达式来完成吗(假设一旦我把"var-7“和"7”作为整数,我仍然需要处理一些东西来知道该用什么代替它)?
我希望问题是清楚的。我的不确定主要是关于最好的方法,因为我可能能够破解一些东西,但它可能是迟缓和丑陋的。
发布于 2013-07-30 02:15:19
你最好的选择是使用preg_replace_callback。在下面的代码中,我直接使用您的数组,但是您说您希望从xml读取,所以您的读取逻辑将取代简单的数组访问。您可能还想考虑一下,如果索引与xml中的任何内容不相对应,您想要做什么。在下面的例子中,我假设您根本不想替换它,但这取决于您。
$str = "Hey I am some text,[var-1] a lot of these [var-3] parts will have to [var-9] go away and be exchanged [var-2] by others";
$var[1] = "really";
$var[2] = "quickly";
$var[3] = "strange";
$var[9] = "definitely";
$done = preg_replace_callback('/(?P<original>\[var-(?P<index>\d+)\])/', function($match) use($var) {
return isset($var[$match['index']]) ? $var[$match['index']] : $match['original'];
}, $str);
echo $done;发布于 2013-07-30 05:33:34
如果您想避免使用preg_replace_callback,您可以这样做:
while(preg_match('/\[var-(\d+)\]/', $str, $m)){
$str = preg_replace('/\[var-' . $m[1] . '\]/', $var[$m[1]], $str);
}https://stackoverflow.com/questions/17937106
复制相似问题