正则表达式只用最后一个空白字符分割字符串

cha*_*tsm 13 php regex string split

希望这应该是一个快速而简单的方法,使用PHP我试图将一个字符串拆分成一个数组,但仅限于最后一个空白实例.到目前为止我有......

$str="hello this is     a    space";
$arr=preg_split("/\s+/",$str);
print_r($arr);

Array ( [0] => hello [1] => this [2] => is [3] => a [4] => space ) 
Run Code Online (Sandbox Code Playgroud)

...按空白的所有实例分割.

如何将此正则表达式展开以仅按空白的最后一个实例进行拆分?成为...

Array ( [0] => hello this is     a [1] => space ) 
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Bar*_*ers 44

尝试:

$arr=preg_split("/\s+(?=\S*+$)/",$str);
Run Code Online (Sandbox Code Playgroud)

编辑

一个简短的解释:

(?= ... )被称为正前方看.例如,如果下一个字符(右边的一个字符)是a ,a(?=b)则只匹配单个'a'字符'b'.请注意,'b'不是比赛的一部分!

\S只是角色类 的简写[^\s].换句话说:它匹配除空白字符以外的单个字符.在+*,使字符类\S 的占有欲.

最后,$表示字符串的结尾.

回顾一下,完整的正则表达式\s+(?=\S*+$)将用简单的英语读取如下:

只有在向前看那些空格字符时才匹配一个或多个空白字符,可以看到除空格字符之外的零个或多个字符,后跟字符串的结尾.