如果在字符串中找到字符,如何用字符串包装字符串中的字符?

时间:2012-10-29 21:02:59

标签: php regex string replace preg-replace

例如:

$stringA = 'Whatcha talkin bout Willis?';
$stringB = 'aeiou';

我需要将字符串匹配中的所有字符包装在带有<span>的字符串中。

我该怎么做?

echo tagVowels($stringA);

function tagVowels($string) {
    // ????
    // So far I've been using a manual loop through each character.
    // I'm hoping for a simpler/cleaner way.
    for ($i = 0; $i <= strlen($string) -1; $i++) {
        if (strpos()) {
            $string = str_replace();
        }
    }
}

结果:

Wh<span>a</span>tch<span>a</span> t<span>a</span>lk<span>i</span>n bout W<span>i</span>ll<span>i</span>s

2 个答案:

答案 0 :(得分:2)

$stringB生成一个字符类:

$stringA = preg_replace('/['.$stringB.']/', '<span>$0</span>', $stringA);

这将在span标记中包含每个字符。如果您希望连续匹配的字符以相同的span标记结尾,请使用:

$stringA = preg_replace('/['.$stringB.']+/', '<span>$0</span>', $stringA);

请注意,如果在正则表达式字符类(^]-\)中包含元字符,则此方法会变得很难看。但是,正如Brad Christie所提到的,如果您拨打preg_quote($stringB)而不是立即插入$stringB,则可以解决此问题。

答案 1 :(得分:1)

使用非正则表达式变体,利用str_replace接受数组的能力:

$find = str_split($stringB);
$replace = array();
foreach ($find as $ltr)
{
    $replace[] = sprintf('<span>%s</span>', $ltr);
}
$stringA = str_replace($find, $replace, $stringA);

简单示例:http://ideone.com/3CKctq