使用 sublime 的正则表达式问题(查找/替换)

问题描述 投票:0回答:1

好的,使用 bash 终端或在 sublime 之类的东西中查找/替换,我想找到:

BLK=$'\e[0;30m'
RED=$'\e[0;31m'
GRN=$'\e[0;32m'
YEL=$'\e[0;33m'
BLU=$'\e[0;34m'
MAG=$'\e[0;35m'
CYN=$'\e[0;36m'
WHT=$'\e[0;37m'

前 3 个字母和 =$,并用前 3 个别名替换它,前 3 个字母=“echo -e”(引用后面和最后一个引用之前的所有内容)。到目前为止,甚至还没有:

这是我陷入困境的地方:

我可以找到/替换别名(前 3 个字母),但无法完成其余部分。该正则表达式看起来像这样:

Find: ([A-Z]{3,5})(\=\$)(?:\')(\\e\[\d\;?\d{1,3}m)(?:\')
Replace: alias  \1

但似乎无法完成整个事情。使用 Sublime 文本编辑器。

regex perl replace find
1个回答
0
投票

可能带有替换字符串;模式是正确的。 (我只熟悉 Java 并在这里发布了一个工作解决方案。请看看它是否可以帮助您创建等效的 Sublime 替代品。)

String s = "BLK=$'\\e[0;30m'\nRED=$'\\e[0;31m'\nGRN=$'\\e[0;32m'";

Pattern p = Pattern.compile( "([A-Z]{3,5})(\\=\\$)(?:\\')(\\\\e\\[\\d\\;?\\d{1,3}m)(?:\\')" );
Matcher m = p.matcher( input );

while( m.find() ){
    String repl = m.replaceAll( "alias $1='echo -e $3'" );
    System.out.println( repl );
}

如果您不熟悉 Java:

  • 由于存在许多 '' 转义字符,该模式可能看起来很混乱。但我使用了与您发布的完全相同的模式,即
    ([A-Z]{3,5})(\=\$)(?:\')(\\e\[\d\;?\d{1,3}m)(?:\')
  • 在 Java 中,组被标识为
    $1
    $2
    等,而不是
    \1
    \2
    等。

结果

对于代码中的

input
值(我从您的问题中获取),以下是输出:

alias BLK='echo -e \e[0;30m'
alias RED='echo -e \e[0;31m'
alias GRN='echo -e \e[0;32m'
© www.soinside.com 2019 - 2024. All rights reserved.