假设我有一个字符串:
ABC DEF SASF 123 (35)
我的预期输出如下:
Array (
[0] => ABC
[1] => DEF SASF 123
[2] => (35)
)
我正在尝试使用$str = preg_split("/(^\S+\s+)|\s+(?=\S+$)/",$str, 3);
执行此操作但目前的问题是此RegEx将替换$str[0]
中的内容,它就像
Array (
[0] =>
[1] => DEF SASF 123
[2] => (35)
)
如何修改RegEx以输出我的预期结果?
答案 0 :(得分:4)
根据以下正则表达式分割您的输入字符串。
^\S+\K\s+|\s+(?=\S+$)
只需匹配第一个字词,然后在\S+
旁边添加\K
即可将其弃置。然后匹配以下一个或多个空格。 |
或者匹配前一个到最后一个单词的多个空格。 \S+
匹配一个或多个非空格字符。
$str = "ABC DEF SASF 123 (35)";
$match = preg_split('~^\S+\K\s+|\s+(?=\S+$)~', $str);
print_r($match);
<强>输出:强>
Array
(
[0] => ABC
[1] => DEF SASF 123
[2] => (35)
)
答案 1 :(得分:2)
^(\S+)\s+|\s+(?=\S+$)
尝试通过此分裂。示例代码。
preg_split('/^(\S+)\s+|\s+(?=\S+$)/', 'ABC DEF SASF 123 (35)', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE)
或者只是匹配并抓住捕获而不是拆分。
^(\S+)\s+(.*?)\s+(\S+)$
$re = "/^(\\S+)\\s+(.*?)\\s+(\\S+)$/";
$str = "ABC DEF SASF 123 (35)";
preg_match_all($re, $str, $matches);