PHP / Laravel обрезать все, кроме последнего слова в пространстве имен - PullRequest
0 голосов
/ 08 октября 2018

Попытка обрезать полностью определенное пространство имен, чтобы использовать только последнее слово.Пример пространства имен - App\Models\FruitTypes\Apple, где последним словом может быть любое количество типов фруктов.Разве это не должно ...

$fruitName = 'App\Models\FruitTypes\Apple';
trim($fruitName, "App\\Models\\FruitTypes\\");

... сделать трюк?Возвращает пустую строку.Если я попытаюсь обрезать только App\\Models\\, он вернет FruitTypes\Apples, как и ожидалось.Я знаю, что обратная косая черта - это экранирующий символ, но удвоение должно относиться к ним как к реальной обратной косой черте.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Если вы хотите использовать для этого нативную функциональность, а не манипуляции со строками, то ReflectionClass::getShortName выполнит эту работу:

$reflection = new ReflectionClass('App\\Models\\FruitTypes\\Apple');
echo $reflection->getShortName();

Apple

См. https://3v4l.org/eVl9v

0 голосов
/ 08 октября 2018

preg_match() с шаблоном регулярных выражений \\([[:alpha:]]*)$ должно сработать.

$trimmed = preg_match('/\\([[:alpha:]]*)$/', $fruitName);

Ваш результат будет затем жить в `$ trimmed 1 '.Если вы не возражаете против того, чтобы шаблон был немного менее явным, вы могли бы сделать:

preg_match('/([[:alpha:]]*)$/', $fruitName, $trimmed);

И тогда ваш результат будет в $trimmed[0].

Если matches предоставляется, затем заполняется результатами поиска.$matches[0] будет содержать текст, который соответствует полному шаблону, $matches[1] будет иметь текст, который соответствует первому захваченному заключенному в скобки подшаблону и т. Д.
preg_match - php.net

(matches - третий параметр, который я назвал $trimmed, полное объяснение см. В документации)


Объяснение дляшаблон регулярного выражения

\\ соответствует символу \ буквально, чтобы установить начало матча.

Скобки () создают группу захвата для возврата совпадения или подстроки совпадения.

В группе захвата ([[:alpha:]]*):

[:alpha:] совпаденийбуквенный символ [a-zA-Z]

Квантор * означает совпадение от нуля до неограниченного числа раз, максимально возможное число

Затем $ устанавливает положение в концестрока.

Таким образом, в основном, «найдите последний \, а затем верните все буквы между этим и концом строки».

...