字符串比较使用正则表达式

时间:2015-10-17 10:25:20

标签: c++ regex string

我有一个字符串说:

std::string s1 = "@Hello$World@";

我希望将它与另一个字符串匹配,但仅限于某些字符:

std::string s2 = "_Hello_World_";

字符串必须具有相同的长度并完全匹配,忽略_个字符,这些字符可以是任何字符。换句话说,我想匹配" Hello"的序列。和"世界"在相同的指数。

我可以在这里使用一个循环忽略那些索引,但我想知道我是否可以使用正则表达式执行此操作?

2 个答案:

答案 0 :(得分:1)

是的,你可以这样使用std::regex_match

std::string string("@Hello$World@");
std::regex regex("^.Hello.World.$");
std::cout << std::boolalpha << std::regex_match(string, regex);

Live demo

正则表达式中的.(点)表示&#34;任何字符&#34;,^表示&#34;字符串的开头&#34; $表示字符串的结尾。

答案 1 :(得分:1)

'。'正则表达式模式中的(点)运算符将作为任何char的替代。下面有3个字符串,其中包含与pat变量匹配的不同分隔符...

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    regex pat(".Hello.World.");
    // regex pat(.Hello.World., regex_constants::icase); // for case insensitivity

    string str1 = "_Hello_World_";
    string str2 = "@Hello@World@";
    string str3 = "aHellobWorldc";

    bool match1 = regex_match(str1, pat);
    bool match2 = regex_match(str2, pat);
    bool match3 = regex_match(str3, pat);

    cout << (match1 ? "Matched" : "Not matched") << endl;
    cout << (match2 ? "Matched" : "Not matched") << endl;
    cout << (match3 ? "Matched" : "Not matched") << endl;


    //system("pause");
    return 0;
}