使用lookahead / lookbehind有条件地在正则表达式中选择一个字符?

时间:2016-03-15 04:50:08

标签: regex

我正在制作一个代码清理工具,它会自动将我的代码格式化为我公司的C ++代码风格标准。 一个这样的标准是方法名称必须在(之前有一个空格。

void Method (...);

我想使用正则表达式来匹配这些括号,以便我可以用(替换(

由于这只适用于方法签名,我想忽略if(...)while(...)等字符串。

我的想法是使用否定前瞻来确保该行不包含“C ++单词”

^(?!if|for|switch|do|while).+(\()

并使用负面的lookbehind确保(前面没有空格。

(?<! )\(

这些可以单独完成,但我很难将它们组合起来。 首先,这是一种合理的方法吗?有没有更好的办法?

更重要的是,如何选择(

1 个答案:

答案 0 :(得分:1)

你需要使用负面的lookbehind断言。

(?<!\b(if|for|switch|do|while))\(

(?<!\bif|\bfor|\bswitch|\bdo|\bwhile)\(

(?<!\s)(?<!\bif|\bfor|\bswitch|\bdo|\bwhile)\(

替换为:

 (

DEMO