【发布时间】:2020-05-09 12:40:25
【问题描述】:
我是初级,不熟悉正则表达式,我正在尝试使用正则表达式和 preg_split 来制作带有句子的密码生成器。
除了一件事,一切都完成了,例如“我有 2 只猫”这句话。结果应为“I'vg2c”。但我唯一拥有的是“Ig2c”,因为我用空格分隔(
preg_split("/[\s]|/", $string, -1, PREG_SPLIT_NO_EMPTY); ) 确实在单词和特殊字符之间没有任何空格。
那么是否有任何“简单”选项可以使用 regex/preg_split 或其他方式将特殊字符与单词分开并保留它? :秒 (不知道我是否清楚,对不起我的英语)
代码如下:
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"
【问题讨论】:
-
您还没有共享所有代码,因此不太清楚为什么会得到该输出。如果您需要保留特殊字符,请使用
preg_split("/([[:punct:]])|\s|/", $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); -
非常感谢。我已经编辑了我的帖子以放置整个代码
-
请减少代码以展示当前问题。
-
另外添加几行:例如:
input: initiales("I've got two cats and a dog!");和下一行,expected_output: write_here_what_the_function_should_return。添加一些示例,以便我们更好地了解您的问题。 -
也许你想要
function initiales($string) { return preg_replace('~\b(\w)\w*|\s+~u', '$1', $string); }?
标签: php regex explode preg-split