是否有任何选项可以使用正则表达式/preg_split将特殊字符与单词分开?



我是初级的,对正则表达式不放心,我正在尝试使用正则表达式和preg_split来做一个带有句子的密码生成器。

除了一件事之外,一切都完成了,例如句子"我有 2 只猫"应该结果为"I'vg2c",但我唯一拥有的是"Ig2c",因为我用空格分开(preg_split("/[s]|/", $string, -1, PREG_SPLIT_NO_EMPTY);(,并且单词和特殊字符之间确实没有任何空格。

那么是否有任何"简单"选项可以将特殊字符与单词分开并保留它,使用 regex/preg_split 或其他东西? (不知道我说不清楚,对不起我的英语(

这是代码:

session_start();

$string = !empty($_POST['sentence']) ? $_POST['sentence'] : NUll;
function initiales($string)
{
$words = preg_split("/[s]/", $string, -1, PREG_SPLIT_NO_EMPTY);
// $words = explode(" ", $string);
$initiale = '';
foreach($words as $init){
$initiale .= $init{0};
}
return $initiale;
}
?>

What I want : 
input: initiales("I've got 21 cats and 1 dog!");
expected_output: "I'vg21ca1d!"
unexpected_output: "Ig2ca1d"

您可以使用

function initiales($string) { 
return preg_replace('#Bp{L}p{M}*+|s+#u', '', $string); 
}

查看 PHP 演示

模式匹配

  • Bp{L}p{M}*+- 任何不在单词开头的字母 + 单词后面的任何变音符号
  • |- 或
  • s+- 1 个或多个空格。

u修饰符用于匹配任何 Unicode 空格,并使BUnicode 感知。

最新更新