0

Я пытаюсь использовать preg_match_all для возврата отдельных массивов для различных элементов в строке CamelCase. В моем примере я пытаюсь получить префикс строки в одном массиве, а все остальное (часть верблюжьей части строки) разбивается на второй массив. Например, get_BookGenreTitle должен возвращать get_ в одном массиве и другой массив, содержащий слова Book, Genre и Title. Или, для дальнейшей демонстрации, post_PersonID вернет post_ в один массив и другой массив, содержащий идентификатор слова.PHP preg_match_all CamelCase, получая prefix_ и элементы CamelCased

У меня есть следующий кусок кода, который получается, но несколько небрежно. Когда он возвращает массив, содержащий префикс, массив также содержит несколько пустых элементов, равное количеству элементов CamelCased.

<?php 

$var = "get_BookGenreTitle"; 

preg_match_all("/(get_|post_)?([A-Z][A-Z0-9]*(?=$|[A-Z][a-z0-9])|[A-Za-z][a-z0-9]+)/", $var, $matches); 

print_r($matches); 

?> 

Возвращает: Array ([0] => Array ([0] => get_Book [1] => Жанр [2] => Название) [1] => Array ([0] => get_ [1] => [2] =>) [2] => Массив ([0] => Книга [1] => Жанр [2] => Название))

Мне было интересно, если есть каким-то образом вернуть как массив с префиксом, так и отдельный массив с элементами CamelCase, но без пустых элементов в префиксном массиве.

Код результата: Array ([0] => Array ([0] => get_Book [1] => Жанр [2] => Название) [1] => Массив ([0] => get_) [2] => Массив ([0] => Книга [1] => Жанр [2] => Название))

ответ

0

каждый раз, когда что-то не найдено, но запрашивается внутри(), вы получите пустой элемент массива. Я не могу вспомнить какие-либо опции, чтобы отменить это поведение.

+0

Черт, я просто продолжаю думать, что должен быть то, о чем я не думаю. Он близок, если он просто не собирал эти пустые элементы. – waywardspooky

+0

вы все равно можете запустить его позже и сбросить потерянные элементы ... но я думаю, что только с preg_match_all вы туда не попадете;) – Tobias