-1

例えば:

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

stringA の any に一致する stringB のすべての文字を でラップする必要があり<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タグでラップされます。連続する一致する文字を同じ span タグで終了させたい場合は、これを使用します。

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

正規表現文字クラス ( ) 内にメタ文字である文字を含めると、このアプローチは醜くなることに注意してください^]-\。ただし、Brad Christie が述べたように、すぐpreg_quote($stringB)に挿入する代わりに呼び出すと、この問題を回避できます。$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 に答える