SublimeText 片段的正则表达式

2024-02-03

我现在已经在这个 Sublime Snippet 上停留了一段时间了。

我想在创建新类时显示正确的包名称,使用TM_FILEPATH and TM_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 。

我对正则表达式真的没有经验,提前谢谢。

:]

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


我们可以通过一些技巧在一次替换中做到这一点。我们要做的是,将一些不同的情况放入我们的模式中,并对每个情况进行不同的替换。实现此目的的技巧是替换字符串不得包含文字字符,而完全由“反向引用”组成。在这种情况下,那些没有参加比赛的组(因为它们是不同案例的一部分)将简单地作为空字符串写回,而不会参与替换。让我们开始吧。

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

^.+/src/

我们只是想删除它,所以不需要捕获任何东西 - 也不需要写回任何东西。

现在我们要匹配后续文件夹直到最后一个。我们将捕获文件夹名称,并匹配尾随/,但写回文件夹名称和.。但我说替换字符串中没有文字!所以.也必须来自捕获​​。这里的假设是,你的文件总是有一个扩展名。我们可以通过前瞻从文件名中获取句点。我们还将使用该前瞻来确保前面至少还有一个文件夹:

^.+/src/|\G([^/]+)/(?=[^/]+/.*([.]))

我们将其替换为$1$2。现在,如果第一种选择成功,则分组$1 and $2将为空,并且前导位仍然被删除。如果第二种选择成功,$1将是文件夹名称,并且$2将捕获一个时期。甜的。这\G是一个锚点,确保所有匹配项彼此相邻。

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

^.+/src/|\G([^/]+)/(?=[^/]+/.*([.]))|\G([^/]+)/[^/]+$

现在我们将其替换为$1$2$3以获得最终解决方案。Demo. http://regex101.com/r/bC9nS5

概念上类似的变体是:

^.+/src/|\G([^/]+)/(?:(?=[^/]+/.*([.]))|[^/]+$)

替换为$1$2。我实际上只考虑了第二个和第三个选择的开头。Demo. http://regex101.com/r/kP9tG3

最后,如果 Sublime 使用的是Boost 的扩展格式字符串语法 http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html,实际上可以有条件地将字符放入替换中(无需从文件扩展名中神奇地召唤它们):

^.+/src/|\G(/)?([^/]+)|\G/[^/]+$

现在我们有了第一个选择src(将被删除),最后一个斜杠和文件名的第三个选择(将被删除),以及要保留的所有文件夹的中间选择。这次我把要替换的斜杠放在开头。通过条件替换,我们可以写一个.当且仅当该斜杠匹配时:

(?1.:)$2

不幸的是,我现在无法对此进行测试,而且我不知道使用 Boost 正则表达式引擎的在线测试器。但这应该可以很好地解决问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SublimeText 片段的正则表达式 的相关文章

  • 这个巨大的正则表达式是如何工作的?

    我最近在我的一个目录中的一个名为的文件中找到了下面的代码doc php 文件功能或链接到文件管理器 做得非常好 基本上 它列出了当前目录中的所有文件 并且允许您更改目录 它可以访问我的所有文件 添加 重命名 信息 删除 我不记得安装过它 我
  • 匹配所有有效格式 IPv6 地址的正则表达式

    乍一看 我承认这个问题看起来像是这个问题以及与之相关的任何其他问题的重复 匹配有效 IPv6 地址的正则表达式 https stackoverflow com questions 53497 regular expression that
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • 正则表达式库基准

    我最近一直想知道正则表达式实现的性能 并且很难想出很多有用的信息 它很容易对浏览器 javascript 正则表达式性能进行基准测试 网上有很多工具 Chrome 和 Opera 中的 javascript 正则表达式实现几乎摧毁了所有其他
  • 正则表达式上的换行符

    我试图替换两个标签之间的所有内容 但我无法构建正确的表达式 这就是我所做的
  • 如何使正则表达式匹配不区分大小写?

    我有以下正则表达式加拿大的邮政编码 http en wikipedia org wiki Postal codes in Canada ABCEGHJKLMNPRSTVXY 1 d 1 A Z 1 d 1 A Z 1 d 1 它工作正常 但
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式
  • 正则表达式获取包含某些字符但不包含其他字符的单词

    我想要的是一个正则表达式 它可以获取包含例如字符的单词a并且不包含字符b and c 在我看来 以下内容完成了一半的工作 bc 但我想要言语 并含有a这里不考虑 使用消极的前瞻性 确保我们要捕获的单词没有b nor c 然后 匹配该单词是否
  • 如何让 Vim 突出显示非 ascii 字符?

    我试图让 Vim 突出显示非 ASCII 字符 是否有可用的设置 正则表达式搜索模式或插件来执行此操作 在 a 中使用范围 搜索中的字符类 您应该能够excludeASCII 十六进制字符范围 因此突出显示 假设您有hlsearch启用 所
  • _实际_ Twitter 主题标签格式?不是你的正则表达式,也不是他的代码——真正的代码?

    更新 如果可以的话 请使用 Twitter 的实体 他们为您以及其他项目找到了解决方案 我的情况是 我只有没有实体的推文和所有额外的元数据 我花了我认为不合理的时间试图找到actual主题标签的格式 据我搜索得知 Twitter 尚未发布任
  • 替换C#字符串中的数字

    我正在尝试使用正则表达式对字符串进行一些工作 但遇到了一些困难 我的目标是用字符替换字符串中的数字 特别是如果字符串中有一组数字 我想用一个字符替换整个数字组 如果只有一个数字 我想将其替换为 例如 如果我有字符串 test12345 tx
  • 如何添加 Java 正则表达式实现中缺少的功能?

    我是 Java 新手 作为一名 Net 开发人员 我非常习惯Regex Net 中的类 Java 实现Regex 正则表达式 还不错 但它缺少一些关键功能 我想为 Java 创建自己的帮助器类 但我想也许已经有一个可用的了 那么 是否有任何
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • .NET 正则表达式可匹配任何语言的任何类型的字母

    我可以使用哪种正则表达式来匹配 允许 任何语言的任何类型的字母 我需要匹配任何字母 包括任何变音符号 例如 并排除任何类型的符号 数学符号 货币符号 装饰符号 方框图字符等 和标点符号 我正在使用 ASP NET MVC 2 和 NET 4

随机推荐