Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用preg_Split在分隔符之前的最后一个空格拆分字符串?_Php_Regex_Preg Split - Fatal编程技术网

Php 使用preg_Split在分隔符之前的最后一个空格拆分字符串?

Php 使用preg_Split在分隔符之前的最后一个空格拆分字符串?,php,regex,preg-split,Php,Regex,Preg Split,我尝试使用preg_split在斜杠之前的每个空格处拆分以下字符串。我知道这将是一个简单的正则表达式,但我似乎无法使用正则表达式来理解它 $string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6'; 我需要在每个/之前的最后一个空格处拆分字符串,以得到以下结果: DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE K

我尝试使用preg_split在斜杠之前的每个空格处拆分以下字符串。我知道这将是一个简单的正则表达式,但我似乎无法使用正则表达式来理解它

$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
任何帮助都将不胜感激

以防它不必是正则表达式

$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
匹配后跟包含斜杠但未使用的单词的空格;
preg_split()
未将其包含在分隔符中,仅使用空格字符。

您可以使用先行断言。阅读
@ (?=[^ ]*/)@