我是初中生,对正则表达式不放心,我正在尝试使用正则表达式和 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/

    10-16 03:05