使用 preg_split 在定界符之前拆分字符串最后 Space?
Split String at Last Space before Delimiter Using preg_split?
我正在尝试使用 preg_split 在斜杠前的每个 space 处拆分以下字符串。我知道这将是一个简单的 REGEX,但我似乎无法使用 RegExr 解决它?
$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
我需要在每个 / 之前的最后 space 拆分字符串,以给出以下结果:
DZ9243/XSHAGT FFGD JERSE XS2
DZ9232/MHAGT SUUMTE KNI M10
DZ9232/LHAGT SUMMER KNI L6
如有任何帮助,我们将不胜感激!
万一它没有是正则表达式……
$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
$parts = explode(' ', $string);
$results = [];
$i = -1;
foreach($parts as $part) {
strpos($part, '/') !== false ? $results[++$i] = $part : $results[$i] .= ' ' . $part;
}
var_dump($results);
您可以使用先行断言:
$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
$pieces = preg_split('@ (?=[^ ]*/)@', $string);
print_r($pieces);
输出为:
Array
(
[0] => DZ9243/XSHAGT FFGD JERSE XS2
[1] => DZ9232/MHAGT SUUMTE KNI M10
[2] => DZ9232/LHAGT SUMMER KNI L6
)
正则表达式
@ (?=[^ ]*/)@
@
就是regex
delimiter;通常 /
用作分隔符,但此正则表达式尝试匹配 /
,这就是为什么最好使用不同的分隔符;
- 后面跟着一个space字符;它是您要用作分割输入字符串的分隔符的 space;
(
开团;断言需要该组;
?=
是前瞻性的积极断言;它要求组与输入字符串匹配,但不消耗与组匹配的输入字符串中的字符;
[^ ]*/
为群内容;它与任何非 space 字符匹配任意次数,后跟 /
;这是包含斜杠的单词 (/
);
)
结束群
总而言之,regex
匹配space后跟一个包含斜线但不被消耗的单词;它不包含在 preg_split()
的分隔符中,仅使用 space 字符。
我正在尝试使用 preg_split 在斜杠前的每个 space 处拆分以下字符串。我知道这将是一个简单的 REGEX,但我似乎无法使用 RegExr 解决它?
$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
我需要在每个 / 之前的最后 space 拆分字符串,以给出以下结果:
DZ9243/XSHAGT FFGD JERSE XS2
DZ9232/MHAGT SUUMTE KNI M10
DZ9232/LHAGT SUMMER KNI L6
如有任何帮助,我们将不胜感激!
万一它没有是正则表达式……
$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
$parts = explode(' ', $string);
$results = [];
$i = -1;
foreach($parts as $part) {
strpos($part, '/') !== false ? $results[++$i] = $part : $results[$i] .= ' ' . $part;
}
var_dump($results);
您可以使用先行断言:
$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
$pieces = preg_split('@ (?=[^ ]*/)@', $string);
print_r($pieces);
输出为:
Array
(
[0] => DZ9243/XSHAGT FFGD JERSE XS2
[1] => DZ9232/MHAGT SUUMTE KNI M10
[2] => DZ9232/LHAGT SUMMER KNI L6
)
正则表达式
@ (?=[^ ]*/)@
@
就是regex
delimiter;通常/
用作分隔符,但此正则表达式尝试匹配/
,这就是为什么最好使用不同的分隔符;- 后面跟着一个space字符;它是您要用作分割输入字符串的分隔符的 space;
(
开团;断言需要该组;?=
是前瞻性的积极断言;它要求组与输入字符串匹配,但不消耗与组匹配的输入字符串中的字符;[^ ]*/
为群内容;它与任何非 space 字符匹配任意次数,后跟/
;这是包含斜杠的单词 (/
);)
结束群
总而言之,regex
匹配space后跟一个包含斜线但不被消耗的单词;它不包含在 preg_split()
的分隔符中,仅使用 space 字符。