-1

例如:

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

我需要将 stringB 中的所有字符与 stringA 中的任何匹配的字符都用<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
4

2 回答 2

2

生成一个字符类$stringB

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

这会将这些字符中的每一个都包含在span标签中。如果您希望连续匹配的字符出现在同一个跨度标记中,请使用以下命令:

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

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

于 2012-10-29T21:07:27.447 回答
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

于 2012-10-29T21:08:59.130 回答