Php 是否有任何选项可以使用regex/preg_split将特殊字符与单词分开?
我年幼,对正则表达式不太在行,我正在尝试用正则表达式和preg_split做一个密码生成器 除了一件事之外,所有的一切都完成了,例如“我有两只猫”这句话应该是“I'vg2c”。但我唯一拥有的是“Ig2c”,因为我用空格分隔(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(“/[\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}*+
-或|
-1个或多个空格\s+
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现在,它是。看见