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

PHP正则表达式-获取段落中的第一个字母,并将其用span包装,php,regex,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 $ne

以下是一个例子:

$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='“bla”bla

'; $search='^*([\w])(.+)*

$\i'; $replacement='$1$2

'; $new=preg_replace($search,$replacement,$str); echo$new。“\n”;
它工作得很好。但是,如果给定的字符串以某种特殊字符(如“,”)开头,它将删除它。 示例
$str='bla-bla

';



总而言之,我想把第一个字母放在这里(如上所示)。

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

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

$\i';
编辑:包含特殊字符

将其放在括号中以捕获它

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

$\i';
演示:(底部有一个替换字符串的替换标记)

或作为完成的代码

$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";
$str='“bla”bla

'; $search='^(\W*)([\W])(.+)*

$\i'; $replacement='1$2$3

'; $new=preg_replace($search,$replacement,$str); echo$new。“\n”;
我认为以下方法应该有效:

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

$string[0]=”如果要保留特殊字符,可以使用以下命令。我试了一下

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

$\i'; $replacement='1$2$3

';

这与您的示例是一致的。

我通常直接回答问题,不会胡乱猜测,但似乎最有可能使用您的代码来设计段落的第一个字母。您可以这样做(使用所谓的伪类):


.

还有一种方法可以做到-



“我没有试过,但我想应该能用……”不,不会。它甚至在语法上都是无效的。我不是php的家伙,那只是一个理论想法!如果你不是PHP爱好者,为什么要回答这个问题?这是毫无意义的。StackOverflow应该提供答案,而不是黑暗中的疯狂刺杀。那么你在这里评论什么是一个好答案?如果你知道得更清楚,那么请更正我的答案,停止抨击别人,因为它只需要字母,但会删除字母前面的特殊字符<代码>“bla-bla”adsas

=>
bla-bla“asdas

。您是否知道?我想这比用PHP做要干净一点?是的,只是需要一些关于使用正则表达式的解释。仍在学习。:)谢谢它不是完全跨浏览器的。例如,在IE7中不起作用。。。但我个人喜欢这样一种解决方案:)可能希望将后者替换为图像,这取决于字母是什么,因此可能需要更多的css来解决,但我同意css解决方案通常比脚本解决方案更好。优雅而现代的解决方案很少跨浏览器。但我想如果IE不存在的话,他们中的大多数都是。就我个人而言,我只是忽略了这个“浏览器”。
p:first-letter
{ 
    font-size:200%;
    color:#8A2BE2;
}
<?php
$str = '<p style="bla">"Great!
</P>';
$str = preg_replace( '~(<p.*?>\W*?)(\w)(.*?</p>)~is', "$1<span>$2</span>$3", $str);
echo $str;
<?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";
?>