如果这是在某个地方发布我道歉,但我粗略的搜索没有发现任何东西.
在做一些Python编程时,我注意到以下命令:
re.sub("a*((ab)*)b", r"\1", "aabb")
Run Code Online (Sandbox Code Playgroud)
返回空字符串.但是sed中的等效命令:
echo "aabb" | sed "s/a*\(\(ab\)*\)b/\1/"
Run Code Online (Sandbox Code Playgroud)
回报ab.
我觉得python正则表达式开头的"a*"指令与两者都匹配a,导致"(ab)*"匹配零次,但我不知道sed是如何出现的ab.有谁知道造成这种情况的两个正则表达式引擎之间有什么区别?我相信它们都默认贪婪地匹配星星,但我发现sed可能从右边而不是左边匹配.任何见解将不胜感激.
Ruby对块有一种有趣的语法(管道之间的参数,后跟一系列语句):
[1, 2, 3].each do |x|
puts x
end
Run Code Online (Sandbox Code Playgroud)
Rust也使用类似的语法:
arr.sort_by_key(|a| {
let intermediate_value = some_function(a);
intermediate_value + 10
});
Run Code Online (Sandbox Code Playgroud)
我想知道这种语法是否早于Ruby(特别是在管道之间放置参数,我相信我在其他地方也看到过,但不确定在哪里),如果是的话,什么语言使用它?
我相信Smalltalk也使用管道,但用于对象初始化,在Google上找不到其他示例。
谢谢!