如何用特定字符前面没有的空格拆分字符串?
How can I split a string by white spaces that are not precedent by a certain character?
我只想在白色 spaces 处拆分一个字符串,它前面没有特定的分隔符(在我的例子中是:)。例如:
$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);
但是每次出现白色时它仍然会分裂 space。
编辑:我想我问错了问题,但是 "whatever this is" 应该保留为单个字符串
编辑 2:冒号前的位是已知的并保持不变,也许以某种方式合并这些会使任务更容易(不在应该保持在一起的字符串中以白色 space 字符拆分)?
您可以在拆分正则表达式中使用前瞻:
/\h+(?=[A-Z][a-z]*: )/
正则表达式 \h+(?=[A-Z][a-z]*: )
匹配 1+ 个白色 space 后跟以大写字母和冒号开头的单词和 space.
你可以的
$string = "Time: 10:40 Request: page.php Action: whatever this is Refer: Facebook";
$split = preg_split('/\h+(?=[A-Z][a-z]*:)/', $string);
dd($split);
另一种选择是匹配冒号之前的内容,然后匹配以 space、非白色 space 字符和冒号开头的下一部分:
\S+:\h+.*?(?=\h+\S+:)\K\h+
\S+:
匹配1+次非白色space char
\h+
匹配1+次水平白色space char
.*?
匹配除换行符以外的任何字符非贪婪
(?=\h+\S+:)
正面前瞻,断言右边是 1+ 水平白色space 字符,1+ 非白色space 字符和冒号
\K\h+
忘记使用\K
匹配的内容并匹配1+水平白色space字符
我只想在白色 spaces 处拆分一个字符串,它前面没有特定的分隔符(在我的例子中是:)。例如:
$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);
但是每次出现白色时它仍然会分裂 space。
编辑:我想我问错了问题,但是 "whatever this is" 应该保留为单个字符串
编辑 2:冒号前的位是已知的并保持不变,也许以某种方式合并这些会使任务更容易(不在应该保持在一起的字符串中以白色 space 字符拆分)?
您可以在拆分正则表达式中使用前瞻:
/\h+(?=[A-Z][a-z]*: )/
正则表达式 \h+(?=[A-Z][a-z]*: )
匹配 1+ 个白色 space 后跟以大写字母和冒号开头的单词和 space.
你可以的
$string = "Time: 10:40 Request: page.php Action: whatever this is Refer: Facebook";
$split = preg_split('/\h+(?=[A-Z][a-z]*:)/', $string);
dd($split);
另一种选择是匹配冒号之前的内容,然后匹配以 space、非白色 space 字符和冒号开头的下一部分:
\S+:\h+.*?(?=\h+\S+:)\K\h+
\S+:
匹配1+次非白色space char\h+
匹配1+次水平白色space char.*?
匹配除换行符以外的任何字符非贪婪(?=\h+\S+:)
正面前瞻,断言右边是 1+ 水平白色space 字符,1+ 非白色space 字符和冒号\K\h+
忘记使用\K
匹配的内容并匹配1+水平白色space字符