PHP正则表达式 - 获取段落中的第一个字母并将其包装在span中

时间:2012-03-13 14:26:20

标签: php regex

以下是一个例子:

$str = '<p>"bla" bla</p>';
$search = '_^<p> *([\w])(.+) *</p>$_i';
$replacement = '<p><span class="first_letter">$1</span>$2</p>';

$new = preg_replace( $search, $replacement, $str );

echo $new."\n";

完美无缺。但是如果给定的字符串以某种特殊字符开头,例如“,”,它将删除它。 示例$str = '<p>bla bla</p>';


总结一下,我想把第一个字母放在这里(如上所述)。

6 个答案:

答案 0 :(得分:2)

未经测试,但尝试添加匹配非单词字符的\W(大写字母W),而不是匹配搜索字符串中的零个或多个空格。那应该与你的第一个字母相符。

$search = '_^<p>\W*([\w])(.+) *</p>$_i';

编辑:包含特殊字符

将其放在括号中以捕捉它

$search = '_^<p>(\W*)([\w])(.+) *</p>$_i';

demo:http://refiddle.com/1s8(底部有替换字符串的替换标记)

或完成代码......

$str = '<p>"bla" bla</p>';
$search = '_^<p>(\W*)([\w])(.+) *</p>$_i';
$replacement = '<p>$1<span class="first_letter">$2</span>$3</p>';

$new = preg_replace( $search, $replacement, $str );

echo $new."\n";

答案 1 :(得分:2)

我通常直接回答问题并且不做疯狂的猜测,但似乎最有可能使用你的代码来设置段落的第一个字母。你可以做这样的事情(使用一个所谓的伪类):

p:first-letter
{ 
    font-size:200%;
    color:#8A2BE2;
}

The :first-letter pseudo-element­Specs

答案 2 :(得分:1)

如果要保留特殊字符,可以使用以下内容。我测试了一下。

$search = '_^<p>([\W]*)([\w])(.+) *</p>$_i';
$replacement = '<p>$1<span class="first_letter">$2</span>$3</p>';

这适用于您的示例。

答案 3 :(得分:1)

<?php
$str = '<p style="bla">"Great!
</P>';
$str = preg_replace( '~(<p.*?>\W*?)(\w)(.*?</p>)~is', "$1<span>$2</span>$3", $str);
echo $str;

答案 4 :(得分:1)

可以采取的另一种方式 - http://ideone.com/v5KvL

<?php
  $str = '<p>"bla" bla</p>';

  $new = preg_replace( '~(?<=^<p>)(\W*)(\w)(?=[\s\S]*</p>$)~i',
                       '$1<span class="first_letter">$2</span>',
                       $str );
  echo $new."\n";
?>

答案 5 :(得分:-1)

我认为以下内容应该有效;

$string[0] = "<span class="first_letter>" + $string[0] + "</span>";