2010-05-13 81 views
0

这种码结构的制造,IMHO,码的可读性:正则表达式等代码

int func() { 
    [...] 
}

这只是一个的事味道,但我更喜欢这一个:

int func() 
{ 
    [...] 
}

所以我试图让一个正则表达式在我的文本编辑器应用,以使代码在第一个例子看起来像第二个。

我拿出像^([\t]*)([^\t{]*)({.*)$(我不记得确切如果是这样的)
的想法是,当一个{发现之前的非空格字符,最有可能的函数头或一个控制结构,然后拆分该行并将{发送到下一行,但保留原始行的缩进级别(IE为相同数量的制表符)。

最后一部分,关于保持缩进级别是我不能正确的。
任何帮助表示赞赏。注:请随意不同意我的编码标准,但请记住,这不是我的主要问题。

+0

如果在字符串文字中出现左大括号会出现什么情况?或者像“#define BEGIN {”?使用正则表达式来获得这种严格的正确性是非常困难的,尽管你可能想出一些能在99%的时间内工作的东西...... – 2010-05-13 15:52:08

+0

关于保存缩进级别,代码编辑器通常具有自动格式化功能这会为您重置所有缩进。如果你有,或者可以找到一个IDE /编辑器来做这件事,那么你不需要担心这个正则表达式的方面。 (事实上​​,你可能会找到一个格式化程序,它可以完成你在这里要做的所有事情) – 2010-05-21 17:26:10

回答

0

这是第一次尝试。

file.cpp:

int main() { 
    for (;;) { 
     break; 
    } 
    return 0; 
} 

使用sed -r s/^\(\\s*\)\(.*\)\\{$/\\1\\2\\n\\1{/ file.cpp输出:

int main() 
{ 
    for (;;) 
    { 
     break; 
    } 
    return 0; 
} 

与线^\(\\s*\)开头的sed

  1. 抢车位选择线路。
  2. 抓住除了最后一个开口支撑\(.*\)以外的所有其他东西。
  3. 抓住拉杆直到行尾\\{$

换人

  • 放回第一和第二反向引用\\1\\2
  • 插入换行符并再次追加第一个返回引用。
  • 大括号。