我正在尝试使用preg_split在斜杠前的每个空格处分割以下字符串。我知道这将是一个简单的REGEX,但是我似乎无法使用RegExr弄清楚它?
$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
我需要在每个/之前的最后一个空格处分割字符串,以得到以下结果:
DZ9243/XSHAGT FFGD JERSE XS2
DZ9232/MHAGT SUUMTE KNI M10
DZ9232/LHAGT SUMMER KNI L6
任何帮助将不胜感激!
答案 0 :(得分:0)
如果它不是没有正则表达式...
$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);
答案 1 :(得分:0)
您可以使用前瞻性断言:
$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;通常将/
用作定界符,但是此正则表达式会尝试匹配/
,这就是为什么最好使用其他定界符的原因; (
开始一个小组;该断言需要该组; ?=
是前瞻性肯定声明;它要求该组匹配输入字符串,但不消耗与该组匹配的输入字符串中的字符; [^ ]*/
是组内容;它多次匹配任何非空格字符,后跟/
;这是包含斜杠(/
)的单词; )
结束群组。总而言之,regex
匹配空格,其后跟包含斜杠的单词,但该单词不被使用; preg_split()
不包含在定界符中,只使用空格字符。