尝试修剪标准名称空间,以便仅使用最后一个单词。示例名称空间是App\Models\FruitTypes\Apple
,其中最后一个单词可以是任意数量的水果类型。这不应该...
$fruitName = 'App\Models\FruitTypes\Apple';
trim($fruitName, "App\\Models\\FruitTypes\\");
...有用吗?它返回一个空字符串。如果我尝试仅修剪App\\Models\\
,它将按预期返回FruitTypes\Apples
。我知道反斜杠是转义字符,但加倍应将其视为实际的反斜杠。
答案 0 :(得分:1)
如果您要使用本机功能而不是字符串操作,那么ReflectionClass::getShortName
将完成此工作:
$reflection = new ReflectionClass('App\\Models\\FruitTypes\\Apple');
echo $reflection->getShortName();
苹果
答案 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]匹配
*
量词表示零次和无限制次数之间的匹配,并且匹配次数尽可能多
然后$
声明字符串末尾的位置。
因此,基本上,“找到最后一个\
,然后返回此字符与字符串结尾之间的所有字母”。