【问题标题】:PHP: Parse a string to perform replacementsPHP:解析字符串以执行替换
【发布时间】:2009-03-25 17:18:12
【问题描述】:

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

规则一:当[PN]大于[N]时做[XXX] 规则 2:获取 [PRD ..] 并添加 [X.XX]

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

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

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

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

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

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

这是假设字段是

  • classname 是 $translate 数组的结果
  • hash 是每个规则的静态 md5 哈希
  • offset 是字段在字符串中的位置(例如,在第一个示例中,字段 [XXX] 位于位置 0,[PN]在位置 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 来尝试实现这一目标,但这还不够好。

【问题讨论】:

  • 我几乎不明白你在问什么......你能发布一些示例代码吗? XXX 和 PN 存储在哪里?它们与 $translate 数组有什么关系?

标签: php regex string replace


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    遍历翻译数组,用值替换字符串中的键

    $string = '[代码]'; $translate = array('classname' => 'oddRow', 'hash' => 'abcdef'); foreach($translate AS $key=>$value) { $string = str_ireplace('[' . $key . ']', $value, $string); }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多