PHP:解析字符串以执行替换

时间:2009-03-25 17:18:13

标签: php regex string replace

我有一组基于文本的规则,其结构如下:

Rule 1: Do [XXX] when [PN] greater than [N]
Rule 2: Get [PRD ..] and add [X.XX]

与此相关的是一组数据,它将每个分组代码转换为CSS类ID(对于jQuery)。

我还有一系列从[代码]到存储在简单结构化数组中的ID的翻译,如下例所示:

$translate = array(
    'XXX' => 'gen-string-input', 
    'PN' => 'gen-positivenumber-input',
    'N' => 'gen-number-input'
);

重要的是要实现以下目标:

我需要将[代码]的每个实例替换为结构如下的span标记:

<span class="[classname]" unique="[hash]" offset="[offset]">[CODE]</span>

这假设字段是

  • classname 是$ translate数组
  • 的结果
  • hash 是一个md5哈希值,对于每个规则都是静态的
  • offset 是字符串中字段的位置(例如,在第一个示例中,字段 [XXX] 位于位置0, [PN] < / strong>在第1位等等。)

根据这些信息,我希望为规则1 获得以下输出:

<p>
    Do <span class="gen-string-input" 
             unique="[md5]"
             offset="0">[XXX]</span>
    when <span class="gen-positivenumber-input"
               unique="[md5]" 
               offset="1">[PN]</span>
    greater than <span class="gen-number-input" 
                       unique="[md5]" 
                       offset="2">[N]</span>
</p>

非常感谢任何帮助,我目前正在使用str_replace来尝试实现这一点,但它还不够好。

2 个答案:

答案 0 :(得分:0)

好的,实际上你需要的是preg_replace_callback。请参阅递归回调示例。

答案 1 :(得分:0)

遍历translate数组,用值

替换字符串中的键
$string = '[CODE]';
$translate = array('classname' => 'oddRow', 'hash' => 'abcdef');

foreach($translate AS $key=>$value)
{
$string = str_ireplace('[' . $key . ']', $value, $string);
}