首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SublimeText片段的Regex

SublimeText片段的Regex
EN

Stack Overflow用户
提问于 2013-09-09 21:15:55
回答 1查看 1K关注 0票数 4

我已经被困在这段崇高的片段上了。

在使用TM_FILEPATHTM_FILENAME创建新类时,我希望显示正确的包名。

在打印TM_FILEPATH变量时,我得到如下内容:

/Users/caubry/d/[...]/src/com/[...]/folder/MyClass.as

我想转换这个输出,这样我就可以得到如下内容:

com.[...].folder

这包括:

  • /com/[...]/folder/MyClass.as之前移除任何东西;
  • 删除TM_FILENAME及其扩展;在本例中为MyClass.as
  • 最后找到所有的斜线然后用点代替它们。

到目前为止,我得到的是:

${1:${TM_FILEPATH/.+(?:src\/)(.+)\.\w+/\l$1/}}

这个显示:

com/[...]/folder/MyClass

我明白如何用点代替溅痕,例如:

${1:${TM_FILEPATH/\//./g/}}

但是,我很难将这个逻辑添加到前一个逻辑中,也很难删除逻辑末尾的TM_FILENAME。

我对Regex真的没什么经验,谢谢。

:]

编辑: [...]表示文件夹的可变数量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-09 21:43:28

我们可以用一些诡计来代替这一点。我们要做的是,在我们的模式中加入几种不同的情况,并对每一种情况进行不同的替换。要做到这一点,关键在于替换字符串必须不包含任何文字字符,而是完全由“反向引用”组成。在这种情况下,那些没有参加比赛的组(因为它们是另一种情况的一部分)将被简单地写回空字符串,而不会对替换做出贡献。我们开始吧。

首先,我们希望在最后一个src/之前删除所有内容(为了模仿代码片段的行为-如果您想要删除所有内容直到第一个src/),可以使用一个非贪婪的量词:

代码语言:javascript
复制
^.+/src/

我们只想放弃这个,所以没有必要捕捉任何东西,也不需要写任何东西。

现在我们想要匹配后续的文件夹,直到最后一个。我们将捕获文件夹名,也将匹配尾随的/,但返回文件夹名和.。但是我说在替换字符串中没有文字文本!因此,.也必须来自捕获。下面是一个假设,即您的文件总是有一个扩展名。我们可以通过查找从文件名中获取句点。我们还将使用这种前瞻性来确保前面至少还有一个文件夹:

代码语言:javascript
复制
^.+/src/|\G([^/]+)/(?=[^/]+/.*([.]))

我们将用$1$2代替这个。现在,如果第一个替代捕获,组$1$2将为空,并且前导位仍然被删除。如果第二个选项捕获,$1将是文件夹名,$2将捕获一个句点。甜。\G是确保所有匹配项彼此相邻的锚点。

最后,我们将匹配最后一个文件夹及其后面的所有内容,并且只回写文件夹名:

代码语言:javascript
复制
^.+/src/|\G([^/]+)/(?=[^/]+/.*([.]))|\G([^/]+)/[^/]+$

现在,我们将用$1$2$3来代替它,作为最终的解决方案。演示。

在概念上类似的一种变体是:

代码语言:javascript
复制
^.+/src/|\G([^/]+)/(?:(?=[^/]+/.*([.]))|[^/]+$)

代之以$1$2。我只考虑了第二种和第三种选择的开始。演示。

最后,如果Sublime使用的是Boost的扩展格式字符串语法,那么实际上可以有条件地将字符放入替换中(而不必神奇地从文件扩展名中提取字符):

代码语言:javascript
复制
^.+/src/|\G(/)?([^/]+)|\G/[^/]+$

现在,我们有了src之前的第一个选项(将被删除),最后一个斜杠和文件名的第三个选项(将被删除),以及您想要保留的所有文件夹的中间选项。这一次,我把斜杠可选地替换在开头。使用条件替换,我们可以在那里写入一个.当且仅当该斜杠匹配时:

代码语言:javascript
复制
(?1.:)$2

不幸的是,我现在不能测试这个,我也不知道一个在线测试器使用Boost的regex引擎。但这应该没什么问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18707155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档