regex
regex
1. 简介
C++有一个标准库提供了对正则表达式的支持。这个库叫做<regex>
,它包含了一些类和函数,可以用于匹配、搜索、替换和分割字符串。
以下是一些常用的<regex>
库中的类和函数:
-
std::regex
:表示一个正则表达式对象。 -
std::smatch
:保存匹配结果的对象。 -
std::regex_match()
:检查整个字符串是否与正则表达式匹配。 -
std::regex_search()
:在字符串中搜索满足正则表达式的子串。 -
std::regex_replace()
:用指定的替换字符串替换正则表达式匹配到的子串。 -
std::regex_iterator
:迭代器类,用于遍历字符串中的正则表达式匹配项。
2. 简单示例
下面是一个简单的示例,演示了如何使用正则表达式库来匹配电话号码:
|
上述代码使用正则表达式\\d{3}-\\d{3}-\\d{4}
匹配字符串中的电话号码,并打印出匹配到的电话号码。请注意,在C++中,由于反斜杠在字符串中是转义字符,所以需要使用双反斜杠来表示一个普通的反斜杠。
3.详细介绍
<regex>
库是C++11引入的,它提供了对正则表达式的支持。使用这个库,你可以进行字符串的匹配、搜索、替换和分割等操作。
以下是该库中一些重要的类和函数:
-
std::regex
:表示一个正则表达式对象。你可以使用构造函数创建一个正则表达式实例,并且还可以使用正则表达式字面值(例如R"(\d{3}-\d{3}-\d{4})"
)来创建一个正则表达式。std::regex regex("\\d{3}-\\d{3}-\\d{4}"); // 创建一个正则表达式对象来匹配###-###-####格式的电话号码
-
std::smatch
:保存匹配结果的对象。当你使用正则表达式对一个字符串进行匹配或搜索时,匹配结果将存储在std::smatch
对象中。你可以通过索引或迭代器来访问匹配到的子串。std::string input = "My phone number is 123-456-7890.";
std::regex regex("\\d{3}-\\d{3}-\\d{4}");
std::smatch match;
if (std::regex_search(input, match, regex)) {
std::cout << "Phone number found: " << match.str() << std::endl;
} -
std::regex_match()
:用于检查整个字符串是否与正则表达式完全匹配。std::string input = "123-456-7890";
std::regex regex("\\d{3}-\\d{3}-\\d{4}");
if (std::regex_match(input, regex)) {
std::cout << "The string is a valid phone number." << std::endl;
} -
std::regex_search()
:在字符串中搜索满足正则表达式的子串。它会返回第一个匹配到的子串和它的位置。std::string input = "My phone number is 123-456-7890.";
std::regex regex("\\d{3}-\\d{3}-\\d{4}");
std::smatch match;
if (std::regex_search(input, match, regex)) {
std::cout << "Phone number found: " << match.str() << std::endl;
} -
std::regex_replace()
:用指定的替换字符串替换正则表达式匹配到的子串。它可以替换所有匹配项或只替换第一个匹配项。std::string input = "Hello, World!";
std::regex regex("[aeiou]"); // 匹配所有小写元音字母
std::string replacement = "*";
std::string result = std::regex_replace(input, regex, replacement);
std::cout << result << std::endl; // 输出 "H*ll*, W*rld!" -
std::regex_iterator
:迭代器类,用于遍历字符串中的正则表达式匹配项。你可以使用它来逐个访问所有匹配到的子串。std::string input = "Hello, World!";
std::regex regex("\\w+"); // 匹配一个或多个单词字符
std::sregex_iterator it(input.begin(), input.end(), regex);
std::sregex_iterator end;
while (it != end) {
std::cout << it->str() << std::endl;
++it;
}
4. 其它
这只是<regex>
库的一些基本用法,还有其他更高级的功能,例如捕获组、反向引用和自定义正则表达式标记等。可以参考C++的文档或其他资源,以获得更详细的了解和更复杂的用法。