Regex 将图案从字符串后移到字符串前

Regex 将图案从字符串后移到字符串前,regex,scripting,grep,Regex,Scripting,Grep,我有一个很大的代码库要排序,所以我希望尽可能地自动化这个过程。我已经成功地将所有与我的任务相关的行变灰了,但是我想自动完成任务本身 我尝试将所有尾随增量更改为前导增量,如下例所示: i++; 变成 ++i; 我想正则表达式也会涉及其中,我对这些都有些生疏了。另外,哪种语言最适合编写脚本?我目前正在使用Windows7x64,但是平台无关的解决方案会很酷。另外,如果你能给我指一些具体的资源来了解这类问题,那就太棒了。这样就可以了 s/([a-z0-9]+)\+\+/++$1/g 但这是邪恶的

我有一个很大的代码库要排序,所以我希望尽可能地自动化这个过程。我已经成功地将所有与我的任务相关的行变灰了,但是我想自动完成任务本身

我尝试将所有尾随增量更改为前导增量,如下例所示:

i++;
变成

++i;
我想正则表达式也会涉及其中,我对这些都有些生疏了。另外,哪种语言最适合编写脚本?我目前正在使用Windows7x64,但是平台无关的解决方案会很酷。另外,如果你能给我指一些具体的资源来了解这类问题,那就太棒了。

这样就可以了

s/([a-z0-9]+)\+\+/++$1/g
但这是邪恶的,它会破坏这样的东西:

print "+++++++++Some heading++++++++++++\n";
更不用说i++和++我实际做不同的事情,你需要使用i++

我的建议(假设您确实有一些真正的理由认为i++在许多情况下是错误的):

然后在您最喜欢的文本编辑器中打开
fixme.txt
,手动调查每次事件,并在运行时将其从文本文件中删除。

首先,请参阅有关
int
等基本类型的信息,这样不会提高效率。但是,假设您知道这一点,解决方案取决于您将使用什么工具。如果您使用的是Perl,即

perl -pi -w -e 's/search/replace/g;' *.cc
…那么这个正则表达式就可以工作了:

s/\b([a-zA-Z]\w*)\+\+/\+\+$1/g

我同意@Flimzy的观点,尽管这看起来非常危险,不应该自动化。

我以前在项目中也做过这样的工作。如果您的代码库位于存储库中,那么这是一个好主意。方便的是,这允许您运行更改,然后将项目差异转储到您最喜欢的文本编辑器中,以查看所有更改。快速查看会让您看到是否有任何意外内容被编辑,您可以将其修复回来

除了使用建议的regex-Flimzy之外,另一个选择是构建一个小型的lexer/parser来适应这个用例。您并不是在寻找一个完整的编译器,而是一个具有足够的注释和引用状态的编译器

有一个阅读c代码的示例lexer,它非常小,演示了这个工具链的功能。我相信其他地方也有这样的例子。如果它看起来很复杂,可以用一个简单的状态机和用perl脚本构建的正则表达式系统来伪装它


最后,如果您愿意使用python,您还可以查看。

这听起来纯粹是邪恶的。。。你可能会破坏你的密码。。。但是…可能是指
\++
而不是
\++\
。谢谢!我想我可能不得不手动完成这项工作,但我很想看看它到底是如何工作的
s/\b([a-zA-Z]\w*)\+\+/\+\+$1/g