我正在寻找应用程序和编程语言构造来搜索正则表达式模式,以某种方式转换匹配然后替换它。一个非常简单的例子:将“myCamelCasedString”转换为“my_camel_cased_string”。
在Ruby中,它简单明了:
s = "myCamelCasedString".gsub(/[A-Z]/) { |m| "_" + m.downcase }
在PHP中它更长,但也可能
preg_replace_callback('/[A-Z]/',
// Using PHP 5.3 anonymous function as callback
function($m) { return "_" . strtolower($m[0]); },
"myCamelCasedString");
文本编辑器jEdit也通过“Beanshell片段”支持这一点,但我总是要查找如何做到这一点。那么 - 我将如何在其他语言中执行此操作,是否有专门的应用程序/编辑器可以让我这样做(以及可能的转换的方便参考)?
答案 0 :(得分:1)
我认为Ruby是您正在寻找的专用应用程序:
数据:
some other text
myCamelCasedString
here is yetAnotherCamelCasedString
小脚本:
$ ruby -pe '$_.gsub!(/[A-Z]/) { |m| "_" + m.downcase }' <input
some other text
my_camel_cased_string
here is yet_another_camel_cased_string
魔术酱是“-p”开关。它将“-e”开关提供的代码包装在“while gets(); ...; print $ _ end”中。 '$ _'是一个Perlish变量,它保存最近读取的行。
答案 1 :(得分:1)
Perl:
$str =~ s/([A-Z])/'_'.lc$1/eg;
答案 2 :(得分:0)
由于我希望在尽可能多的编程语言中回答这个问题,这里是 JavaScript 解决方案:
s = "myCamelCasedString".replace(/[A-Z]/g, function(s) {
return '_'+s.toLowerCase();
});
有关功能参数的详细信息,请参阅documentation from MDC。您将获得子匹配和匹配偏移量作为附加参数。
以下是 Python 解决方案:
import re
re.sub(r"[A-Z]", lambda s: "_" + s.group(0).lower(), "myCamelCasedString")