有一个如此形成的字符串:
#foo1 foo2# foo3 foo4 #foo5# ##foo6# #foo7## #foo8 foo9#
预期应该是如此形成的数组:
array (
[0] => #foo1 foo2#
[1] => foo3
[2] => foo4
[3] => #foo5#
[4] => ##foo6# #foo7##
[5] => #foo8 foo9#
);
或者更简单地分割空间,但是在分隔符内捕获所有内容,包括它......在数组中。
注意: 字符串可以重复播放。
答案 0 :(得分:4)
您可以使用此替换正则表达式preg_match_all
:
/(#+).*?\1|\S+/
RegEx分手:
(#+)
- 在捕获的组#1中匹配1个或多个#
.*?
- 匹配0个或更多任何字符(非贪婪)\1
- 对已捕获的组#1进行反向引用,以确保我们在RHS上具有相同的#
|
- 或\S+
- 一个或多个非空白字符<强>代码:强>
$str = '#foo1 foo2# foo3 foo4 #foo5# ##foo6# #foo7## #foo8 foo9#';
preg_match_all('/(#+).*?\1|\S+/', $str, $matches);
print_r($matches[0]);
<强>输出:强>
Array
(
[0] => #foo1 foo2#
[1] => foo3
[2] => foo4
[3] => #foo5#
[4] => ##foo6# #foo7##
[5] => #foo8 foo9#
)