正则表达式查找替换

前端之家收集整理的这篇文章主要介绍了正则表达式查找替换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1 项目描述

在文本中查找替换对应的字符串,功能如下:

thisisbefore(self,func) 替换成thisisafter(func,self).

2详细设计

2.1字符串查找替换

  1. string regexReplace(string sMsg,string sSreach,string sReplace)
  2. {
  3. string sRet = "";
  4. std::regex rPattern(sSreach);//搜索
  5. sRet = std::regex_replace(sMsg,rPattern,sReplace);
  6. return sRet;
  7. }

2.2selffunc交换位置

  1. string regexSelfChangePos(string sMsg)
  2. {
  3. string sFunc = "";
  4. string sSelf = "";
  5. std::smatch rPotRet;
  6. std::regex rPotPattern("[(](\\s*[a-zA-Z]+[0-9]*[a-zA-Z]+[0-9]*[.]*[a-zA-Z]+[0-9]*[a-zA-Z]+[0-9]*\\s*),(\\s*[a-zA-Z]+[0-9]*[a-zA-Z]+[0-9]*[.]*[a-zA-Z]+[0-9]*[a-zA-Z]+[0-9]*\\s*)[)]");
  7. const std::sregex_token_iterator end;
  8.  
  9. for (std::sregex_token_iterator itPot(sMsg.begin(),sMsg.end(),rPotPattern); itPot != end; ++itPot)
  10. {
  11. std::string sPot = *itPot;
  12. if (std::regex_search(sPot,rPotRet,rPotPattern))
  13. {
  14. sFunc = rPotRet[1].str();
  15. sSelf = rPotRet[2].str();
  16. }
  17.  
  18. }
  19.  
  20. sFunc = regexDelBlank(sFunc);
  21. sSelf = regexDelBlank(sSelf);
  22. string tmp = sSelf + "Tmp";
  23. sMsg = regexReplace(sMsg,sFunc,tmp);
  24. sMsg = regexReplace(sMsg,sSelf,sFunc);
  25. sMsg = regexReplace(sMsg,sFunc + "Tmp",sSelf);
  26. return sMsg;
  27. }

2.3文件读写操作

  1. int fileTest()
  2. {
  3. char* old_locale = _strdup(setlocale(LC_CTYPE,NULL));
  4. setlocale(LC_CTYPE,"chs");
  5. CString StrFileName("d:\\fileTest.lua");
  6. CStdioFile TempFile,File;
  7. if (!File.Open(StrFileName,CFile::modeRead))
  8. return -1;
  9. CString StrTempFileName = File.GetFileTitle() + CString(".tmp");
  10. if (!TempFile.Open(StrTempFileName,CFile::modeCreate | CFile::modeReadWrite))
  11. return -1;
  12. CString Str;
  13. while (File.ReadString(Str))
  14. {
  15. string sMsg = (CStringA)Str;
  16. sMsg = clickDeal(sMsg);
  17. CString strNew(sMsg.c_str());
  18. TempFile.WriteString(strNew + CString("\n"));
  19. }
  20. File.Close();
  21. TempFile.Close();
  22. CFile::Remove(StrFileName);
  23. CFile::Rename(StrTempFileName,StrFileName);
  24. printf("successful ");
  25. setlocale(LC_CTYPE,old_locale); //还原语言区域的设置
  26. free(old_locale);//还原区域设定
  27. return 0;
  28. }

全部源代码

  1. // Regex2.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Regex2.h"
  6. #include "stdafx.h"
  7.  
  8. #include <regex>
  9. #include <iostream>
  10. #include <string>
  11. #include "Windows.h"
  12. #include "Windef.h"
  13. #include "atltypes.h"
  14. #include <atlconv.h>
  15. #include <locale.h>
  16. // 唯一的应用程序对象
  17.  
  18. CWinApp theApp;
  19.  
  20. using namespace std;
  21.  
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #endif
  25.  
  26.  
  27. // 唯一的应用程序对象
  28.  
  29. using namespace std;
  30. //替换
  31. string regexReplace(string sMsg,sReplace);
  32. return sRet;
  33. }
  34.  
  35. string regexDelBlank(string sMsg)
  36. {
  37. string sSreach = "\\s*";
  38.  
  39. std::regex rPattern(sSreach);//搜索
  40.  
  41. sMsg = std::regex_replace(sMsg,"");
  42.  
  43. return sMsg;
  44. }
  45. string regexSelfChangePos(string sMsg)
  46. {
  47. string sFunc = "";
  48. string sSelf = "";
  49. std::smatch rPotRet;//([0-9]+) ([a-zA-Z]+)
  50. std::regex rPotPattern("[(](\\s*[a-zA-Z]+[0-9]*[a-zA-Z]+[0-9]*[.]*[a-zA-Z]+[0-9]*[a-zA-Z]+[0-9]*\\s*),sSelf);
  51. return sMsg;
  52. }
  53.  
  54. string clickDeal(string sMsg)
  55. {
  56. string sOut = regexReplace(sMsg,"thisisbefore","thisisafter");
  57.  
  58. sMsg = regexSelfChangePos(sOut);
  59. return sMsg;
  60. }
  61.  
  62. int fileTest()
  63. {
  64. char* old_locale = _strdup(setlocale(LC_CTYPE,old_locale); //还原语言区域的设置
  65. free(old_locale);//还原区域设定
  66. return 0;
  67. }
  68.  
  69.  
  70. int _tmain(int argc,TCHAR* argv[],TCHAR* envp[])
  71. {
  72. int nRetCode = 0;
  73.  
  74. HMODULE hModule = ::GetModuleHandle(NULL);
  75.  
  76. if (hModule != NULL)
  77. {
  78. // 初始化 MFC 并在失败时显示错误
  79. if (!AfxWinInit(hModule,NULL,::GetCommandLine(),0))
  80. {
  81. // TODO: 更改错误代码以符合您的需要
  82. _tprintf(_T("错误: MFC 初始化失败\n"));
  83. nRetCode = 1;
  84. }
  85. else
  86. {
  87. // TODO: 在此处为应用程序的行为编写代码
  88. fileTest();
  89. }
  90. }
  91. else
  92. {
  93. // TODO: 更改错误代码以符合您的需要
  94. _tprintf(_T("错误: GetModuleHandle 失败\n"));
  95. nRetCode = 1;
  96. }
  97. getchar();
  98. return nRetCode;
  99. }

猜你在找的正则表达式相关文章