我有这个正则表达式(几乎可以工作):
s/(?<!\+|-| )(\+|-)(?!=|\+|-| )/ $1 /g;
https://regex101.com/r/oQ8qU8/2
我想在每个+
和-
字符之前和之后添加一个空格。这是测试字符串:
cab+=1+2+3+deb++-5+-5;
输出应为:
cab += 1 + 2 + 3 + deb++ - 5 + -5;
我想处理所有C / C ++特殊情况,例如负数A=-C
- &gt; A = -C
,前/后递增变量A++=3
- &gt; A++ = 3
...
在这里使用正则表达式有一个很好的解决方案吗?
答案 0 :(得分:-1)
我为你写了一个子,因为那些正则表达式不断增长和成长......
sub format{
my $text = shift;
#substitute '+'
$text =~ s/(?<!\+)\+(?!\+|=)/ \+ /g;
#substitute '-'
$text =~ s/(?<!-)-(?!-|=|>)/ - /g;
#substitute '= , +=, -= (...)'
$text =~ s/([\+,-,\*,\/]?=)/ $1 /g;
#get rid of additional spaces:
$text =~ s/ / /g;
return $text;
}
以下是一些结果:
converting: foo+--bar++-3 += 3-x--+bar = ++c-*const->char++ +2
to: foo + --bar++ - 3 += 3 - x-- + bar = ++c - *const->char++ + 2
converting: ++x->(a+b+--c) *= c++-++b/=9;
to: ++x->(a + b + --c) *= c++ - ++b /= 9;
converting: b+c+a+d-=++*char->(--c+d);
to: b + c + a + d- = ++*char->(--c + d);