Regex用反斜杠替换斜杠里面的#,包括双引号

Regex replace slash with backslash inside #include double quotes

本文关键字:包括双 替换 Regex      更新时间:2023-10-16

我想将#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:%2dn", tMinute, tSecond);
}

#include "Monster.h"
#include "ItemManager.h"
#include "SkilServerManagerSkillmanager.h"
#include "QuestQuestEvent.h"
#include "AESAES.h"
#include "TriggerTimer.h"
// Timer Class
CTimer::CTimer()
{
    printf("Minute / Second");
    printf("t%2d:%2dn", tMinute, tSecond);
}

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

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

谢谢你。

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

这是一个解决方案,将工作notepad++(测试)使用搜索和替换在regex模式

Search: (?m)(?:^#includes*"|G)[^/"]*K/

替换:

解释:

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