有谁比较擅长正则的,求助帮帮小弟

稀饭桶子 发布于 2016/05/27 12:33
阅读 188
收藏 0

一个简单的正则表达式,楞是搞不过。需求是这样

包含你好,或者我好,或者大家好。我是这么写的:

(你好\b|\b你好|你好\B)|(我好\b|\b我好|我好\B)|(大家好\b|\b大家好|大家好\B)

网上的正则测试器测试通过了,但是这boost里面死活搞不定:

std::string str = "你好我好大家好";
    std::string path = R"((你好\b|\b你好|你好\B)|(我好\b|\b我好|我好\B)|(大家好\b|\b大家好|大家好\B))";
    boost::regex expression(path, boost::regex::extended);
    boost::smatch what;
   
    std::string::const_iterator m = str.begin();
    std::string::const_iterator n = str.end();

    while (boost::regex_search(m, n, what, expression)) {
        cout << what[0] << " " << what.position(size_t(0))<< endl;
        m = what[0].second;
    }
    return 0;

求大神拯救我啊


加载中
1
Feng_Yu
Feng_Yu

\b对中文没用,那个只能界定英文字符的边界,所以你中文中间加\b十有八九都不会抓出来。

正确的正则是'(你|我|大家)好'

echo '你好,我好,大家好' | grep -Eo '(你|我|大家)好'
你好
我好
大家好


0
e
earthdog

这个应该是使用单字节字符串的问题吧,你改用wstring和wregex试试看,不行的话,正则里使用中文的unicode码来试试。还有,感觉你这个正则可以简化成:

((?:我|你|大家)好)

0
西南茂
西南茂
^.*(你好|我好|大家好).*$

你试试这个


0
返回顶部
顶部