我只想在没有特定定界符(在我的情况下为:)的空白处分割字符串。例如:
$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:冒号之前的位已知并保持不变,也许以某种方式合并这些位使任务变得更容易(不分割应留在一起的字符串中的空白字符)?
答案 0 :(得分:2)
您可以在拆分正则表达式中使用前瞻:
/\h+(?=[A-Z][a-z]*: )/
正则表达式\h+(?=[A-Z][a-z]*: )
匹配1+个空格,后跟一个以大写字母,冒号和空格开头的单词。
答案 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);
答案 2 :(得分:0)
另一种选择是匹配冒号之前的内容,然后匹配以空格,非空白字符和冒号开头的下一部分:
\S+:\h+.*?(?=\h+\S+:)\K\h+
\S+:
匹配1次以上非空格字符\h+
匹配1+次水平空白字符.*?
匹配除换行符非贪婪以外的所有字符(?=\h+\S+:)
正向前进,断言右边的是1+个水平空白字符,1 +个非空白字符和冒号\K\h+
忘记使用\K
进行匹配的内容,并匹配1个以上水平空白字符