regex_replace函数的工作方式不同

时间:2013-08-21 06:33:27

标签: visual-c++

我在VC ++的一个函数中使用正则表达式。这是我的代码文件:

#include "stdafx.h"
#include<regex>
#include<iostream>
#include<string>
using namespace std;
void test_regex_search(const std::string& input)
{   
    std::cout << " Initial string = " << input <<endl;
    std::regex rgx("(^|\\W)\\d+([a-zA-Z]*)?[\\\-\\\\]?(\\d*)([a-zA-Z]*)?"); 
        std::smatch match;
    char start[200] = {0};
    std::string repalcewith("");
        if (std::regex_search(input.begin(), input.end(), match, rgx))
        {
        std::cout << "match[0] = " << match[0]<< '\n';
        std::cout << "match[1] = " << match[1] << '\n';     
    }
        else
        std::cout << "No match\n";  
    std::regex_replace(&start[0],input.begin(),input.end(),rgx,repalcewith);
    std::cout << "final string = "<<start << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{       
    test_regex_search("HIGH STREET 4323HTY  KM3.5 WINES ");
    return 0;
}

执行后,输出显示如下: 最终字符串= HIGH STREET KM3 WINES

在这个特殊情况下用于&#34; KM3.5&#34;为什么最后的字符串会以&#34; KM3&#34;而我的正则表达不承认&#34;。&#34;?是治疗&#34;。&#34;作为空间或可能是出于这个原因的恰当原因。 提前致谢 沙善

1 个答案:

答案 0 :(得分:0)

.在正则表达式的开头匹配\W。您可能希望使用\b代替(^|\W)