我想只在白色空格中拆分一个字符串,它在它之前没有一个特定的分隔符(在我的情况下)。例如。:
$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:冒号之前的位是已知的并且保持不变,也许合并那些以某种方式使任务更容易(不分裂在应该保持在一起的字符串中的空白字符)?
您可以在拆分正则表达式中使用前瞻:
/\h+(?=[A-Z][a-z]*: )/
Regex \h+(?=[A-Z][a-z]*: )
匹配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);
另一种选择可能是匹配冒号之前的内容,然后匹配以空格,非空白字符和冒号开头的下一部分:
\S+:\h+.*?(?=\h+\S+:)\K\h+
\S+:
匹配非空白字符的1倍以上\h+
匹配水平空白字符的1倍以上.*?
匹配任何字符,除了换行非贪婪(?=\h+\S+:)
正向前瞻,断言右边是1+水平空格字符,1 +非空格字符和冒号\K\h+
忘记使用\K
匹配的内容并匹配1+水平空白字符