解析字串中的固定標誌位
正規表示式和iterator的配合應用
#include <string>
#include <map>
#include <regex>
#include <iostream>
/
/替換\\M+後面的字元
// \\M+195B6 替換為 文
std::regex pattern(R"(\\M+[^\\M]*)"); // 匹配 \\M+ 後跟任意非 \\M 的字元(0次或多次)
std::string CalM_Replcace(std::string inPutStr) {
std::string result;
// 正規表示式模式,匹配 \\M+ 和後面的部分作為一個整體
std::sregex_iterator iter(inPutStr.begin(), inPutStr.end(), pattern);
std::sregex_iterator end;
std::string::const_iterator search_start(inPutStr.cbegin());
while (iter != end) {
std::smatch match = *iter;
auto curPos = match.position();
if (curPos > 0)
{
result += inPutStr.substr(0, curPos);
inPutStr = inPutStr.erase(0, curPos); // 從找到的位置開始,刪除3個字元
iter = std::sregex_iterator(inPutStr.begin(), inPutStr.end(), pattern);
continue;
}
if (curPos == 0)
{
//刪除 \\M+
inPutStr = inPutStr.erase(0, 3); // 從找到的位置開始,刪除3個字元
//擷取內容
std::string substring = inPutStr.substr(0, 5);
inPutStr = inPutStr.erase(0, 5);
// 新增替換後的部分(即 J)
if (mapChineseSign.find(substring) != mapChineseSign.end())
{
result += mapChineseSign[substring]