тестовая строка
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 )
Попробуй это
$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 => '',
)
Других решений пока нет …