例如:
$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
答案 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);