正则表达式的开发人员

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式的开发人员相关的知识,希望对你有一定的参考价值。

我一直试图找出一个正则表达式,允许我在自动跳过评论时搜索特定的字符串。任何人都有这样的RE或知道一个?它甚至不需要足够复杂以跳过#if 0块;我只想让它跳过///*积木。相反,只是在注释块内搜索,也是非常有用的。

环境:VS 2003

答案

这是一个比最初看起来更难的问题,因为你需要考虑字符串中的注释标记,评论自己注释掉的标记等。

我为C#编写了一个字符串和注释解析器,让我看看我是否可以挖出一些有用的东西......如果我发现任何东西,我会更新。

编辑:...好吧,所以我发现了我的旧'codemasker'项目。事实证明我是分阶段完成的,而不是单一的正则表达式。基本上我通过源文件寻找开始令牌,当我找到一个,然后我寻找一个结束令牌并掩盖其间的所有内容。这会考虑起始令牌的上下文...如果您找到“string start”的令牌,那么您可以安全地忽略注释令牌,直到找到字符串的结尾,反之亦然。一旦代码被屏蔽(我使用guids作为掩码,并使用哈希表来跟踪),那么您可以安全地进行搜索和替换,然后最终恢复被屏蔽的代码。

希望有所帮助。

另一答案

对弦乐队要特别小心。字符串通常具有转义序列,当您找到它们的结尾时,您也必须尊重它们。

所以例如"This is "a test""。你不能盲目地寻找双引号来终止。还要注意``“这是”`,这表明你不能只说“除非双引号前面有反斜杠”。

总之,做一些残酷的单元测试!

另一答案

正则表达式不是这项工作的最佳工具。

Perl FAQ

C评论:

#!/usr/bin/perl
$/ = undef;
$_ = <>; 

s#/*[^*]**+([^/*][^*]**+)*/|([^/"']*("[^"\]*(\[dD][^"\]*)*"[^/"']*|'[^'\]*(\[dD][^'\]*)*'[^/"']*|/+[^*/][^/"']*)*)#$2#g;
print; 

C ++评论:

#!/usr/local/bin/perl
$/ = undef;
$_ = <>;

s#//(.*)|/*[^*]**+([^/*][^*]**+)*/|"(\.|[^"\])*"|'(\.|[^'\])*'|[^/"']+#  $1 ? "/*$1 */" : $& #ge;
print;
另一答案

我会复制并首先删除注释,然后以常规方式搜索字符串。

以上是关于正则表达式的开发人员的主要内容,如果未能解决你的问题,请参考以下文章

通过 Java 正则表达式提取 semver 版本字符串的片段

学会这二十个正则表达式,能让你少些1000行代码!

如何从RegEx分组中“排除”空白区域?

这二十个正则表达式,学会的话能让你少写1000行代码

text 正则表达式片段

markdown 正则表达式模式片段