正则表达式:在两个字符串之间提取与特定单词匹配的文本
regex: extract text between two string with text that match a specific word
我正在重构一个非常大的 C 项目,我需要找出特定程序员编写的部分代码。
幸运的是,参与这个项目的每个人都在标准 C 风格的注释中使用他的电子邮件地址来标记他自己的代码。
好的,有人会说这可以通过命令行中的 grep 轻松实现,但这不是我的目标:我可能需要删除这些注释或用其他文本替换它们,因此正则表达式是唯一的解决方案。
例如
/*********************************************
*
* ... some text ....
*
* author: user@domain.com
*
*********************************************/
从 this post 我找到了搜索 C 风格注释的正确表达式:
\/\*(\*(?!\/)|[^*])*\*\/
但这还不够!我只需要包含特定电子邮件地址的评论。幸运的是,我正在寻找的电子邮件地址域在整个项目中似乎是唯一的,因此这可以使它更简单。
我想我必须使用一些积极的先行断言,我试过这个:
(\/\*)(\*(?!\/)|[^*](?=.*domain.com))*(\*\/)
但它没有 运行!
有什么建议吗?
你可以使用
\/\*[^*]*(?:\*(?!\/)[^*]*)*@domain\.com[^*]*(?:\*(?!\/)[^*]*)*\*\/
图案详情:
/\*
- 评论开始
[^*]*(?:\*(?!\/)[^*]*)*
- 除了 */
@domain\.com
- 文字 domain.com
[^*]*(?:\*(?!\/)[^*]*)*
- 除了 */
\*\/
- 评论结束
一个更快的替代方案(因为第一部分将寻找除注释结尾 和 单词 @domain
之外的所有内容):
\/\*[^*@]*(?:\*(?!\/)[^*@]*|@(?!domain\.com)[^*@]*)*@domain\.com[^*]*(?:\*(?!\/)[^*]*)*\*\/
在这些模式中,我为 (\*(?!\/)|[^*])*
使用了一个展开的结构:[^*]*(?:\*(?!\/)[^*]*)*
。 Unrolling 有助于构建更有效的模式。
我正在重构一个非常大的 C 项目,我需要找出特定程序员编写的部分代码。 幸运的是,参与这个项目的每个人都在标准 C 风格的注释中使用他的电子邮件地址来标记他自己的代码。
好的,有人会说这可以通过命令行中的 grep 轻松实现,但这不是我的目标:我可能需要删除这些注释或用其他文本替换它们,因此正则表达式是唯一的解决方案。
例如
/*********************************************
*
* ... some text ....
*
* author: user@domain.com
*
*********************************************/
从 this post 我找到了搜索 C 风格注释的正确表达式:
\/\*(\*(?!\/)|[^*])*\*\/
但这还不够!我只需要包含特定电子邮件地址的评论。幸运的是,我正在寻找的电子邮件地址域在整个项目中似乎是唯一的,因此这可以使它更简单。
我想我必须使用一些积极的先行断言,我试过这个:
(\/\*)(\*(?!\/)|[^*](?=.*domain.com))*(\*\/)
但它没有 运行! 有什么建议吗?
你可以使用
\/\*[^*]*(?:\*(?!\/)[^*]*)*@domain\.com[^*]*(?:\*(?!\/)[^*]*)*\*\/
图案详情:
/\*
- 评论开始[^*]*(?:\*(?!\/)[^*]*)*
- 除了*/
@domain\.com
- 文字domain.com
[^*]*(?:\*(?!\/)[^*]*)*
- 除了*/
\*\/
- 评论结束
一个更快的替代方案(因为第一部分将寻找除注释结尾 和 单词 @domain
之外的所有内容):
\/\*[^*@]*(?:\*(?!\/)[^*@]*|@(?!domain\.com)[^*@]*)*@domain\.com[^*]*(?:\*(?!\/)[^*]*)*\*\/
在这些模式中,我为 (\*(?!\/)|[^*])*
使用了一个展开的结构:[^*]*(?:\*(?!\/)[^*]*)*
。 Unrolling 有助于构建更有效的模式。