Разбить строку в конце пробела перед разделителем Используя preg_split?

Я всегда использую этот синтаксис в самом начале скрипта php.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off
-1
задан lpw 17 January 2019 в 11:14
поделиться

2 ответа

В случае если не нужно быть регулярным выражением…

$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);
0
ответ дан misorude 17 January 2019 в 11:14
поделиться

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

$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
ответ дан axiac 17 January 2019 в 11:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: