我是初中生,对正则表达式不放心,我正在尝试使用正则表达式和 preg_split 来做一个带有句子的密码生成器。
除了一件事外,一切都完成了,例如“我有 2 只猫”这句话。结果应该是“Ivg2c”。但我唯一拥有的是“Ig2c”,因为我用空格(
preg_split("/[\s]|/", $string, -1, PREG_SPLIT_NO_EMPTY);
),实际上单词和特殊字符之间没有任何空格。
那么是否有任何“简单”选项可以使用 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);
}
查看 PHP demo
模式匹配
\B\p{L}\p{M}*+
- 任何不在单词开头的字母 + 后面的任何变音符号 |
- 或 \s+
- 1 个或多个空格。 u
修饰符用于匹配任何 Unicode 空格并使 \B
Unicode 感知。关于php - 是否有任何选项可以使用 regex/preg_split 将特殊字符与单词分开?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59875219/