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