首页 > 解决方案 > VSCODE 片段 PHP 自动填充命名空间

问题描述

我正在尝试为PHP创建一个VSCODE 代码片段,它会自动放置命名空间(基于文件夹路径)。

这个想法是在当前文档的目录上进行替换,考虑到我所有的类都位于MVC文件夹内,并且它位于src文件夹内,示例:

我得到了 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;

任何人都可以帮助解决它吗?

非常感谢!!!

标签: phpregexvisual-studio-codecode-snippetsregexp-replace

解决方案


您可以使用

"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之外的任何零个或多个字符\

演示:

在此处输入图像描述


推荐阅读