如何用不是特定字符的空格分隔字符串?

问题描述 投票:1回答:3

我想只在白色空格中拆分一个字符串,它在它之前没有一个特定的分隔符(在我的情况下)。例如。:

$string = "Time: 10:40 Request: page.php Action: whatever this is Refer: Facebook";

然后从这样的东西我想实现一个数组,这样:

$array = ["Time: 10:40", "Request: page.php", "Action: whatever this is", "Refer: Facebook"];

到目前为止我已尝试过以下内容:

$split = preg_split('/(:){0}\s/', $visit);

但是,每当出现白色空间时,这仍然是分裂的。

编辑:我想我问了一个错误的问题,然而“无论这是什么”应该保持为单个字符串

编辑2:冒号之前的位是已知的并且保持不变,也许合并那些以某种方式使任务更容易(不分裂在应该保持在一起的字符串中的空白字符)?

php regex preg-split
3个回答
2
投票

您可以在拆分正则表达式中使用前瞻:

/\h+(?=[A-Z][a-z]*: )/

RegEx Demo

Regex \h+(?=[A-Z][a-z]*: )匹配1+个空格,后跟一个以大写字母和冒号和空格开头的单词。


1
投票

你能行的

$string = "Time: 10:40 Request: page.php Action: whatever this is Refer: Facebook";

$split = preg_split('/\h+(?=[A-Z][a-z]*:)/', $string);

dd($split);

0
投票

另一种选择可能是匹配冒号之前的内容,然后匹配以空格,非空白字符和冒号开头的下一部分:

\S+:\h+.*?(?=\h+\S+:)\K\h+
  • \S+:匹配非空白字符的1倍以上
  • \h+匹配水平空白字符的1倍以上
  • .*?匹配任何字符,除了换行非贪婪
  • (?=\h+\S+:)正向前瞻,断言右边是1+水平空格字符,1 +非空格字符和冒号
  • \K\h+忘记使用\K匹配的内容并匹配1+水平空白字符

Regex demo | php demo

© www.soinside.com 2019 - 2024. All rights reserved.