Php 是否有任何选项可以使用regex/preg_split将特殊字符与单词分开?

Php 是否有任何选项可以使用regex/preg_split将特殊字符与单词分开?,php,regex,explode,preg-split,Php,Regex,Explode,Preg Split,我年幼,对正则表达式不太在行,我正在尝试用正则表达式和preg_split做一个密码生成器 除了一件事之外,所有的一切都完成了,例如“我有两只猫”这句话应该是“I'vg2c”。但我唯一拥有的是“Ig2c”,因为我用空格分隔( preg_split(“/[\s]|/”,$string,-1,preg_split_NO_EMPTY);)事实上,单词和特殊字符之间没有任何空格 那么,是否有任何“简单”选项可以使用regex/preg_split或其他方法将特殊字符与单词分开并保留它s (不知道我是否清

我年幼,对正则表达式不太在行,我正在尝试用正则表达式和preg_split做一个密码生成器

除了一件事之外,所有的一切都完成了,例如“我有两只猫”这句话应该是“I'vg2c”。但我唯一拥有的是“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); 
}

模式匹配

  • \B\p{L}\p{M}*+
    -单词开头以外的任何字母+单词后面的任何变音符号
  • |
    -或
  • \s+
    -1个或多个空格

u
修饰符用于匹配任何Unicode空格,并使
\B
Unicode感知。

您没有共享所有代码,因此不太清楚为什么会得到该输出。如果需要保留特殊字符,请使用
preg_split(“/([:punct:])\s|/”,$string,-1,preg_split_NO_EMPTY | preg_split_DELIM_CAPTURE)非常感谢。我已经编辑了我的帖子,把整个代码都放进去了。请减少代码以展示当前的问题。另外再添加几行:例如:
input:initiales(“我有两只猫和一只狗!”)
在下一行,
预期的输出:在这里写下函数应该返回的内容
。添加一些示例,以便我们更好地理解您的问题。可能您需要
函数首字母($string){返回preg_replace('~\b(\w)\w*\s+~u','$1',$string);}
?不幸的是,这与重音不匹配:输入:首字母(“Je suis arriveéle 17 septbrare”);输出:“Jsaéel17s。”预期的输出:“Jsal17s”。@MarieSeleneBonifacio现在,它是。看见