[英]PHP: Show Only the First Letter of Each Word + Include Punctuation
我使用下面的代码只显示字符串中每个单词的第一个字母。 例如,“Hello World!” 将显示为“HW”。 但是,我还要包括这样的标点符号:“HW!”
如何修改我的代码以保留标点符号?
$editversetext = preg_split("/[\s,_-]+/", $editversetext);
$initials = "";
foreach ($editversetext as $w) {
$initials .= $w[0];
}
$initials = implode(' ',str_split($initials));
echo $initials . ".";
您可以使用以下正则表达式来匹配您需要的内容:
'~\b(\p{L})\p{L}*(\p{P}?)~u'
请参阅正则表达式演示 。
细节
\\b
- 单词边界 (\\p{L})
- 捕获组#1:一封信 \\p{L}*
- 0+个字母 (\\p{P}?)
- 捕获组#2:可选标点符号(注意:如果您还想匹配符号,请将\\p{P}
替换为[\\p{P}\\p{S}]
) u
- “Unicode”修饰符,它使PCRE_UTF和PCRE_UCP动词能够完全启用Unicode支持。 根据您的输入,您可以使用替换方法,也可以收集匹配项,然后以与现在类似的方式将它们组合到您需要的结果中。
查看PHP演示 :
$str = 'Hello World!';
// Replacing approach (if all words are matches):
echo preg_replace('~\b(\p{L})\p{L}*(\p{P}?)~u', '$1$2', $str) . "\n"; // => H W!
// Collecting/post-processing (if there are non-matching sequences)
$res = [];
preg_replace_callback('~\b(\p{L})\p{L}*(\p{P}?)~u', function($m) use (&$res) {
$res[] = $m[1].$m[2];
return '';
}, $str);
print_r(implode(" ", $res)); // => H W!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.