【问题标题】:Use REGEX to replace X(...) with X{...}使用 REGEX 将 X(...) 替换为 X{...}
【发布时间】:2014-11-21 00:49:13
【问题描述】:

问题来自于将代码更新到使用初始化程序的 C++11。

所以:

a = X(4);
b = X();
c = X( (1+2)*(3+4) );
void P : X(5) { foo(); }

变成

a = X{4};
b = X{};
c = X{ (1+2)*(3+4) };
void P : X{5} { foo(); }

我的 IDE (XCode) 支持 RegEx 搜索和替换。

我试过了:

X\((.*)\)  ->  X{$1}

但它失败了:

X(foo); Y(bar);   ->   X{foo); Y(bar};

有什么方法可以完成这个转换吗?

编辑:this answer 可以持有钥匙吗?还是this one

编辑:抱歉,我的示例列表不完整。提前分类将很困难,所以我只需要不断修改问题,直到我得到所有的边缘情况。我认为问题在于不能依赖任何技巧。

【问题讨论】:

  • 由于平衡括号的语言不规则,我担心如果不“依赖”一个技巧或另一个,你的任务将无法解决。
  • XCode 的正则表达式(可能使用 NSRegularExpression 和 ICU 的正则表达式)没有足够的能力来进行括号平衡。您应该使用另一个文本编辑器(例如 Sublime Text)进行替换。

标签: regex xcode recursion replace brackets


【解决方案1】:

这是因为运算符 * 和 + 是贪婪的。但是,您可以使用表达式

来强制执行惰性
X\((.*?)\);

那个? Symbol 强制执行惰性匹配。

【讨论】:

  • 这不会将int z( (1+2)*(3+4) ); 更改为int z{ (1+2}*(3+4) ); 吗?
  • 谢谢,+1。我刚刚遇到了无法处理的情况,并且已经修改/扩展了问题。
  • 如果事情变得复杂,正则表达式将不再具有足够的能力,并且必须进行一些编码工作来匹配括号等等。你可能只需要编写一段代码来代替正则表达式。
  • 如果事情变得复杂......这是一个解决方案:stackoverflow.com/q/53258096/1066234
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2012-03-29
  • 2021-05-15
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多