Eth*_*th0 1 php regex perl code-snippets sublimetext3
您好,我正在尝试制作一个崇高的文本片段,我想将一个camelCase单词转换为snake_case.我知道有插件允许你将字符串转换为snake_case但我想通过崇高的文本片段来实现.
我有一个如下所示的片段.
<snippet>
<content><![CDATA[
/**
* ${TM_FILEPATH/^.+\/(\w+)\.php$/${1}/} belongs to many (many-to-many) ${1/^((.+)ies)|(.+[^s])s$/\u(?1$2y:$3)/}.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function $1()
{
return \$this->belongsToMany('App\\${1/^((.+)ies)|(.+[^s])s$/\u(?1$2y:$3)/}', '${TM_FILEPATH/^.+\/(\w+)\.php$/\l${1}/}_$1', '${TM_FILEPATH/^.+\/(\w+)\.php$/\l${1}/}_id', '${1/^((.+)ies)|(.+[^s])s$/\l(?1$2y:$3)/}_id');
}
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<tabTrigger>btm</tabTrigger>
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<scope>source.php</scope>
<description>Eloquent belongsToMany() (pivot) relation</description>
</snippet>
Run Code Online (Sandbox Code Playgroud)
作为输出它给了我.
/**
* UserMessages belongs to many (many-to-many) Role.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function roles()
{
return $this->belongsToMany('App\Role', 'userMessages_roles', 'userMessages_id', 'role_id');
}
Run Code Online (Sandbox Code Playgroud)
我最终想要的是userMessages是user_messages.知道怎么做到这一点.
非常感谢.
下面是基于您的示例执行此类操作的代码段示例,但为了清晰起见缩短了(我也将范围更改为embedding.php使用我用于PHP的语法触发).您应该能够在更大的代码段示例中根据您的需求进行调整.
<snippet>
<content><![CDATA[
// ${1/^([A-Z])|(?:([A-Z]))/(?1\l$1:)(?2_\l$2:)/g}
public function ${1}()
{
$0
}
]]></content>
<tabTrigger>btm</tabTrigger>
<scope>embedding.php</scope>
<description>Eloquent belongsToMany() (pivot) relation</description>
</snippet>
Run Code Online (Sandbox Code Playgroud)
可以在非官方文档的片段页面中看到此基础.代码段中变量的扩展采用了这种形式.正则表达式使用boost库正则表达式和格式字符串.${variable/regex/format_string/options}
Boost支持条件替换的形式(?Ntrue:false),对于捕获组N,替换文本是true匹配捕获的东西,或者false如果没有.
这里我们使用正则表达式中的替换来拥有两个捕获组,以便我们可以提供两个不同的替换,具体取决于哪些项匹配.第一个捕获组捕获一个前导大写字符并将其转换为小写字母,而第二个捕获组(不锚定到行的开头)执行相同操作,并且在匹配之前也使用下划线.