是否可以使用正则表达式/ preg_split从单词中分离特殊字符?

问题描述 投票:1回答:1

我不大,对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"


php regex explode preg-split
1个回答
0
投票

您可以使用

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)。

© www.soinside.com 2019 - 2024. All rights reserved.