是否有任何选项可以将特殊字符与 regex/preg_split 的单词分开?
Is there any option to separate special characters from words with regex/preg_split?
我是初级的,对正则表达式不放心,我正在尝试用正则表达式和 preg_split 的句子做一个密码生成器。
一切都完成了,除了一件事,例如句子 "I've got 2 cats." 应该结果为 "I'vg2c." 但我唯一拥有的是 "Ig2c" 因为我用白色分开 spaces (
preg_split("/[\s]|/", $string, -1, PREG_SPLIT_NO_EMPTY);
) 而且单词和特殊字符之间确实没有任何白色 space 。
那么是否有任何“"simple"”选项可以使用 regex/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}\p{M}*+|\s+#u', '', $string);
}
模式匹配
\B\p{L}\p{M}*+
- 任何不在单词开头的字母 + 其后的任何变音符号
|
- 或
\s+
- 1 个或多个空格。
u
修饰符用于匹配任何 Unicode 空格并使 \B
识别 Unicode。
我是初级的,对正则表达式不放心,我正在尝试用正则表达式和 preg_split 的句子做一个密码生成器。
一切都完成了,除了一件事,例如句子 "I've got 2 cats." 应该结果为 "I'vg2c." 但我唯一拥有的是 "Ig2c" 因为我用白色分开 spaces (
preg_split("/[\s]|/", $string, -1, PREG_SPLIT_NO_EMPTY);
) 而且单词和特殊字符之间确实没有任何白色 space 。
那么是否有任何“"simple"”选项可以使用 regex/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}\p{M}*+|\s+#u', '', $string);
}
模式匹配
\B\p{L}\p{M}*+
- 任何不在单词开头的字母 + 其后的任何变音符号|
- 或\s+
- 1 个或多个空格。
u
修饰符用于匹配任何 Unicode 空格并使 \B
识别 Unicode。