拆分字符串中的第一个 space 和最后一个 space 并将输出的大小限制在 3
Split the first space and the last space in a string and limit the size of output in 3
假设我有一个字符串:
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 以输出我预期的结果?
只需根据以下正则表达式拆分您的输入字符串即可。
^\S+\K\s+|\s+(?=\S+$)
只匹配第一个单词,然后通过在 \S+
旁边添加 \K
来丢弃它。然后匹配以下一个或多个space。 |
或者再匹配一个 space 就在最后一个单词之前。 \S+
匹配一个或多个非 space 字符。
$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)
)
^(\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);
假设我有一个字符串:
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 以输出我预期的结果?
只需根据以下正则表达式拆分您的输入字符串即可。
^\S+\K\s+|\s+(?=\S+$)
只匹配第一个单词,然后通过在 \S+
旁边添加 \K
来丢弃它。然后匹配以下一个或多个space。 |
或者再匹配一个 space 就在最后一个单词之前。 \S+
匹配一个或多个非 space 字符。
$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)
)
^(\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);