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

Posted

技术标签:

【中文标题】使用正则表达式进行字符串比较【英文标题】:String compare using regex 【发布时间】:2015-10-17 10:25:20 【问题描述】:

我有一个字符串说:

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

我想将它与另一个字符串匹配,但只匹配某些字符:

std::string s2 = "_Hello_World_";

字符串必须具有相同的长度并且完全匹配,忽略可以是任何字符的_。也就是说,我想在相同的索引处匹配“Hello”和“World”的序列。

我可以在这里使用循环忽略这些索引,但我想知道我是否可以使用正则表达式来做到这一点?

【问题讨论】:

在正则表达式中,点匹配任何字符(换行符除外),因此您的正则表达式必须看起来像 .Hello.World. 【参考方案1】:

'.'正则表达式模式中的(点)运算符将充当任何字符的替代品。下面有 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;

【讨论】:

【参考方案2】:

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

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

Live demo

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

【讨论】:

是否也可以匹配任何小写字符而不是任何字符? @user963241 是的,with classes。请,如果您有任何其他问题,请打开一个新问题,而不是在这里提问。原因是 Stack Overflow 针对单个直接问题 + 相关答案进行了优化; cmets 中的问题和答案甚至可能无法被搜索引擎很好地索引。 谢谢。我只想知道与答案相关的一件事:如果真的有必要在正则表达式中使用^$。我认为没有它们也可以。 @user963241 取决于您是要匹配字符串中的任何位置的.Hello.World.,还是仅在整个字符串匹配.Hello.World. 时才匹配。 但是对于anywhere还是不行

以上是关于使用正则表达式进行字符串比较的主要内容,如果未能解决你的问题,请参考以下文章

linuxlinux 基础正则表达式字符串截取比较分支while循环

常用的正则表达式

python 正则表达式之转义字符

在 Hive 中使用字符串比较和正则表达式时的不同结果

正则表达式贪婪与非贪婪比较

正则表达式高级替换,匹配后进行运算,然后使用结果替换,怎么实现?