Разделение запятой не сопровождается строчной буквой

Помогите мне с рисунком, пожалуйста. У меня есть строка с запятыми, как:

12v some, Item, which contains comma, Another item

Мне нужно разделить его запятыми и получить:

 0 => '12v some'
 1 => 'Item, which contains comma'
 2 => 'Another item'

Как использовать правило, если есть строчные буквы после запятой не разделить str?

Я использую [\s,][ ][A-Z0-9]+, но он обрезает некоторый текст

1 ответ

Решение

Вы можете использовать решение на основе Lookahead, как

preg_split('~\s*,(?!\s*\p{Ll})\s*~', $s)

Посмотреть демо-версию регулярного выражения

подробности

  • \s* - 0+ пробелов
  • , - запятая
  • (?!\s*\p{Ll}) - отрицательный прогноз, который не соответствует совпадению, если непосредственно справа от текущего местоположения есть 0+ пробелов (\s*) с последующей строчной буквой Unicode (\p{Ll})
  • \s* - 0+ пробелов.

PHP демо:

$s = "12v some, Item, which contains comma, Another item";
$res = preg_split('~\s*,(?!\s*\p{Ll})\s*~', $s);
print_r($res);

Выход:

Array
(
    [0] => 12v some
    [1] => Item, which contains comma
    [2] => Another item
)
Другие вопросы по тегам