preg_split и несколько разделителей

тестовая строка

1-gc-communications/edit/profile_picture

позвольте мне начать с первого номера перед первым - будет удостоверение личности, которое мне нужно извлечь. от первой - к первому / будет имя, которое мне нужно извлечь. Всё после этого мне безразлично. Вот пример того, что я ищу:

Array ( [0] => 1 [1] => gc-communications [2] => /edit/profile_picture )

Лучшее, что я мог придумать, это следующие схемы (вместе с их результатами — с пределом 3)

Шаблон: /-|edit\/profile_picture/ Результат: Array ( [0] => 1 [1] => gc [2] => communications/edit/profile_picture )

^ Этот дефект, потому что он делает обе черты.

Шаблон: /~-~|edit\/profile_picture/ Результат: Array ( [0] => 1-gc-communications/ [1] => )

^ крупный сбой.

Я знаю, что могу сделать 2 ограничения и просто разбить на первом / а затем сделать preg_split на приведенном массиве, но мне бы хотелось, чтобы это работало с одной строкой.

Заранее спасибо!

Если это не пойдет, я открыт для других решений «одного лайнера».


Рабочий код. Спасибо!

preg_split("#([^-]+)-([^/]+)/(.*)#", "1-gc-communications/edit/profile_picture",-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY)

Результат

Array ( [0] => 1 [1] => gc-communications [2] => edit/profile_picture )

1

Решение

Попробуй это

$str = '1-gc-communications/edit/profile_picture';
$match = preg_split('#([^-]+)-([^/]+)/(.*)#', $str, 0, PREG_SPLIT_DELIM_CAPTURE);
print_r($match);

вернуть вроде как

 array (
0 => '',
1 => '1',
2 => 'gc-communications',
3 => 'edit/profile_picture',
4 => '',
)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]