PHP标记一个影响标记内部的字符串


PHP tagging a string whitout affecting the inside the tag

情况如下:

Everithing启动表单、数组和字符串:

$var = 'This is a string';
$arr = array(
'This' => '<strong title="this is string">This</strong>',
'is' => '<strong title="this is string">is</strong>'
);

如果我做一个简单的str_replace来用$var中的值替换密钥,你几乎可以猜到它甚至会在标题中替换,我想要的是$var最终是这样的:

<strong title="this is string">This</strong> <strong title="this is string">is</strong> a string

我可以使用一个简单的正则表达式吗?DomDoc?或者它只是一个复杂的算法?

以干净的方式,希望这有帮助:)

<?php
    define ("START_TAG", '<strong title="this is string">');
    define ("END_TAG",   '</strong>');
    // 'i' is for case insensitive, you can remove it ...
    $pattern = '#(this|is)#i';
var_dump (preg_replace ($pattern, START_TAG . '$1' . END_TAG, 'This is test'));

如果空白(这将用一个空格替换多个空白)对您来说不重要,您可以使用strtok来拆分字符串并对每个单词/令牌进行替换:

$var = 'This is a string';
$arr = array(
    'This' => '<strong title="this is string">This</strong>',
    'is' => '<strong title="this is string">is</strong>'
);
$tok = strtok($var, " 'n't"); // Split on space, newline and tab
$result = array();
while ($tok !== false) {
    if (isset($arr[$tok])) {
        $result[] = $arr[$tok];
    }
    else {
        $result[] = $tok;
    }
    $tok = strtok(" 'n't");
}
echo implode(' ', $result), PHP_EOL;

输出:

<strong title="this is string">This</strong> <strong title="this is string">is</strong> a string