Разбить строку в конце пробела перед разделителем Используя preg_split? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь использовать 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

Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете использовать предварительное утверждение:

$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 разделитель ; обычно / используется в качестве разделителя, но это регулярное выражение пытается сопоставить /, и поэтому лучше использовать другой разделитель;
  • за ним следует пробел; это пространство, которое вы хотите использовать в качестве разделителя для разделения входной строки;
  • ( запускает группу; группа нужна утверждением;
  • ?= - позитивное утверждение, ориентированное на будущее; требуется, чтобы группа соответствовала входной строке, но не потребляет символы из входной строки, соответствующей группе;
  • [^ ]*/ - содержание группы; он соответствует любому непробельному символу любое количество раз, за ​​которым следует /; это слово содержит косую черту (/);
  • ) заканчивает группу.

В целом, regex соответствует пробелам, за которыми следует слово, которое содержит косую черту, но слово не используется; preg_split() не входит в разделитель, используется только пробел.

0 голосов
/ 17 января 2019

В случае, если не имеет для регулярного выражения ...

$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);
...