PHP / Laravel修剪名称空间中除最后一个单词外的所有单词

时间:2018-10-08 20:27:02

标签: php string laravel laravel-5 trim

尝试修剪标准名称空间,以便仅使用最后一个单词。示例名称空间是App\Models\FruitTypes\Apple,其中最后一个单词可以是任意数量的水果类型。这不应该...

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

...有用吗?它返回一个空字符串。如果我尝试仅修剪App\\Models\\,它将按预期返回FruitTypes\Apples。我知道反斜杠是转义字符,但加倍应将其视为实际的反斜杠。

2 个答案:

答案 0 :(得分:1)

如果您要使用本机功能而不是字符串操作,那么ReflectionClass::getShortName将完成此工作:

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

苹果

请参见https://3v4l.org/eVl9v

答案 1 :(得分:0)

具有正则表达式模式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]匹配

*量词表示零次和无限制次数之间的匹配,并且匹配次数尽可能多

然后$声明字符串末尾的位置。

因此,基本上,“找到最后一个\,然后返回此字符与字符串结尾之间的所有字母”。