PHP preg_match_all CamelCase, получение элементов prefix_ и CamelCased

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

У меня есть следующий фрагмент кода, который выполняется, но несколько небрежно. Когда он возвращает массив, содержащий префикс, массив также содержит количество пустых элементов, равное количеству элементов 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);

?>

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

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

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


person waywardspooky    schedule 28.10.2010    source источник


Ответы (1)


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

person Toby    schedule 28.10.2010
comment
Черт, я все время думаю про себя, что должно быть что-то, о чем я не думаю. Это близко, если бы он просто не собирал эти пустые элементы. - person waywardspooky; 29.10.2010
comment
вы все еще можете запустить его позже и отключить потерянные элементы ... но я думаю, что только с preg_match_all вы этого не добьетесь;) - person Toby; 29.10.2010