使用 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 字符。