c++ - 正则表达式在 #include 双引号内用反斜杠替换斜杠

标签 c++ regex

<分区>

我想像这样在#include 双引号内用反斜杠替换斜杠。

之前

#include "Monster.h"
#include "ItemManager.h"
#include "Skil/Server/Manager/Skillmanager.h"
#include "Quest/QuestEvent.h"
#include "AES/AES.h"
#include "Trigger/Timer.h"

// Timer Class
CTimer::CTimer()
{
    printf("Minute / Second");
    printf("\t%2d:%2d\n", tMinute, tSecond);
}

之后

#include "Monster.h"
#include "ItemManager.h"
#include "Skil\Server\Manager\Skillmanager.h"
#include "Quest\QuestEvent.h"
#include "AES\AES.h"
#include "Trigger\Timer.h"

// Timer Class
CTimer::CTimer()
{
    printf("Minute / Second");
    printf("\t%2d:%2d\n", tMinute, tSecond);
}

我只想替换#include 标签中的斜杠,而不是替换printf 标签和comment 标签中的斜杠。

我用来搜索的正则表达式是什么?

谢谢。

最佳答案

您的代码是用 C++ 编写的,但您没有说明您打算如何替换斜杠:这可能是在 IDE 中、使用脚本或使用其他工具。

这是一个解决方案,可以使用 Notepad++(已测试)在正则表达式模式下使用搜索和替换。

搜索:(?m)(?:^#include\s*"|\G)[^/"]*\K/

替换:\

解释:

(?m)(?:^#include\s*"|\G)[^/"]*\K/
  • 对整个正则表达式使用这些选项 (?m)
    • ^$ &匹配换行符 m
  • 匹配下面的正则表达式(?:^#include\s*"|\G)
    • 匹配这个备选方案(仅当这个备选方案失败时才尝试下一个备选方案)^#include\s*"
      • 断言行首的位置(在字符串的开头或换行符之后)(换行)^
      • 字面匹配字符串“#include”(区分大小写)#include
      • 匹配作为“空白字符”的单个字符(ASCII 空格、制表符、换行符、回车符、垂直制表符、换页符)\s*
        • 在零次和无限次之间,尽可能多次,根据需要回馈(贪婪)*
      • 逐字匹配字符“”
    • 或者匹配这个选择(如果这个匹配失败,整个组失败)\G
      • 在上一个匹配项的末尾断言位置(第一次尝试的字符串的开头)\G
  • 匹配列表“/”中不存在的任何单个字符 [^/"]*
    • 在零次和无限次之间,尽可能多次,根据需要回馈(贪婪)*
  • 将到目前为止匹配的文本保留在整个正则表达式匹配 \K
  • 逐字匹配字符“/”/

关于c++ - 正则表达式在 #include 双引号内用反斜杠替换斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968429/

相关文章:

regex - 为什么这个grep过滤器很慢?

regex - 此正则表达式替代 “$content =~ s/\n—\n.*?$//s”到底在做什么?

c++ - C++ 将十进制数转换为二进制数

c++ - 逗号分隔的流到结构中

c++ - valgrind堆总结理解

java - 正则表达式模式从字符串中查找单词

c++ - const 关键字在函数声明中的位置

c++ - 在 OpenCv 中扩展轮廓

javascript - 从字符串中提取小数

objective-c - 正则表达式 : meaning of {2, 4}