php - VSCODE 片段 PHP 自动填充命名空间
问题描述
我正在尝试为PHP创建一个VSCODE 代码片段,它会自动放置命名空间(基于文件夹路径)。
这个想法是在当前文档的目录上进行替换,考虑到我所有的类都位于MVC
文件夹内,并且它位于src
文件夹内,示例:
- /dev/project/ src /MVC/Models/Access/Auth,或
- /home/user/dev/project/ src /MVC/Models/Access/Auth,或
- /any_other_folder/ src /MVC/Models/Access/Auth
我得到了 VSCODE 片段变量的完整文件夹名称$TM_DIRECTORY
。
显然,REGEX 上没有错误,如您所见:https ://regex101.com/r/P8CpkX/1
我对剪断代码的尝试:
"namep": {
"prefix": [
"namep"
],
"body": [
"",
"// TM_DIRECTORY: $TM_DIRECTORY",
"namespace ${TM_DIRECTORY/.*src\/(([^\/]*)(\/)?)|(\/)([^\/]*)/$2\\$5/g};"
],
"scope": "php",
"description": "Try to put namespace automatically"
}
结果是:
// TM_DIRECTORY: /home/user/dev/project/src/MVC/Models/Access/Auth
namespace ${TM_DIRECTORY/.*src/(([^/]*)(/)?)|(/)([^/]*)/$5/g};
但预期是(如REGEX所示):
// TM_DIRECTORY: /home/user/dev/project/src/MVC/Models/Access/Auth
namespace \MVC\Models\Access\Auth;
任何人都可以帮助解决它吗?
非常感谢!!!
解决方案
您可以使用
"namep": {
"prefix": [
"namep"
],
"body": [
"namespace \\\\${TM_DIRECTORY/(?:.*[\\/\\\\])?src[\\/\\\\]([^\\/\\\\]*)[\\/\\\\]?|[\\/\\\\]([^\\/\\\\]*)/$1\\$2/g}",
],
"scope": "php",
"description": "Try to put namespace automatically"
}
请参阅正则表达式演示。
它匹配
(?:.*[\/\\])?
- 尽可能多地出现除换行符之外的任何 0+ 字符,然后是\
或/
src[\/\\]
- 一个src
字符串然后/
/\
([^\/\\]*)
/
- 第 1 组:除and之外的任何零个或多个字符\
[\/\\]?
- 一个可选的/
/\
字符|
- 或者[\/\\]
- 一个\
或/
字符([^\/\\]*)
/
- 第 2 组:除and之外的任何零个或多个字符\
演示:
推荐阅读
- c# - C# 反射 GetField().GetValue()
- flutter - 如何在 android 应用程序中为所有用户同步 youtube 播放器?
- php - 如何调用foreach循环内的所有值
- swift - 在 Swift 中使用构造函数时,哪些类型使用默认零值进行初始化?
- django - 如何通过 nginx 提供动态 sitemap.xml?
- database - SQLite VACUUM:表(和索引)存储的连续性如何?
- r - 如何提示用户输入目录以保存下载以在 R Shiny 中使用 ggplot2?
- logstash - 为 Logstash 输出设置仪表板
- security - 我试图在带有规则的 hackthebox 的哈希上使用 hashcat,我每次都得到 Exhausted 的输出
- python - Qbittorrent Api 错误:AttributeError: 'Client' 对象没有属性 'download_from_link'