我不大,对regex不满意,我正在尝试使用regex和preg_split用句子创建密码生成器。
[除了一件事情,所有事情都完成了,例如,句子“我有两只猫。”结果应为“ I'vg2c”。但我唯一拥有的是“ Ig2c”,因为我用空格分隔了(preg_split("/[\s]|/", $string, -1, PREG_SPLIT_NO_EMPTY);
),实际上单词和特殊字符之间没有空格。
因此,是否有任何“” simple“”选项可使用正则表达式/ preg_split或其他方法将特殊字符与单词分开并保留它? :s(不知道我是否清楚,对不起我的英语)
这里是代码:
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('#\B\p{L}|\s+#', '', $string);
}
请参见PHP demo
模式匹配
\B\p{L}
-不在单词开头的任何字母]|
-或\s+
-1个或多个空格。使用u
修饰符以匹配任何Unicode空格(~\B\p{L}|\s+~u
)。