1

我想创建一个正则表达式,它允许我在 C++ 代码中的赋值运算符周围添加空格(因为我更喜欢这种风格),例如,这样

x=something

变成

x = something

if(y==x)

不会变成

if(y = = x)

等等,包括!=, <=,>=

我对正则表达式比较陌生,并尝试了以下方法:

(?<![\s=])(=)(?!=)

我认为这将是一个很好的开端,但这似乎不匹配。有人可以在这里解释一下我对正则表达式的不理解吗?

编辑

使用 Code::Blocks IDE 中不匹配的正则表达式的示例

Code::BLocks 正则表达式尝试

4

2 回答 2

3

尝试这样的事情:(?<![<>=!])\s*=\s*(?!=)替换为=.

或者

([^<>=!])\s*=\s*([^=])替换为\1 = \2

由于模式没有锚定,因此需要两个环视断言。

实际上,您自己的正则表达式只是<>在字符类中丢失了。我已经改进了一点,看看演示。

第一个正则表达式的演示+解释:http ://regex101.com/r/kU1hP2 第二个正则表达式的演示+解释:http ://regex101.com/r/lK1oQ3

注意:\s匹配空格!

于 2013-01-15T13:11:01.747 回答
1

这并不能涵盖所有内容。

如果你想要空间,你需要考虑更多。

试试这个 http://regex101.com/r/oJ8jJ3

((!|<|>|=|\+|%)=|=)

并使用 \1 分隔符

在某些风格的正则表达式中,可能如下所示:

s/((!|<|>|=|\+|%)=|=)/ \1 /g

祝你好运!PS 考虑的案例:

x=something
if(y==x)
if(y <=x)
if(y>=x)
y+=x;
y%=x;
于 2013-01-15T13:40:19.620 回答