C++ std::regex_search

2025 年 2 月 11 日 | 3 分钟阅读

C++ 标准库头文件中包含的一个有用函数是 std::regex_search。它的目的是使用正则表达式模式在目标字符串中搜索匹配项。正则表达式是指定搜索模式的字符序列。它们对于在字符串中匹配模式非常有用。

当目标序列(主题)中的子序列与正则表达式 rgx(模式)进行比较时,返回结果。根据所使用的版本,目标序列可以是 s 或 first 和 last 之间的字符序列。

功能

std::regex_search 不要求正则表达式模式匹配整个输入字符串,而是查找给定输入字符串中模式的第一个实例。

语法

它具有以下语法:

参数

  • 指定要搜索的目标字符串范围的输入迭代器应位于 first 和 last 之间。
  • 用于匹配正则表达式的对象称为 rex。
  • m:std::match_results 对象中匹配结果的位置。
  • flags:可用于修改搜索操作方式的标志。

返回值

  • 如果正则表达式模式出现在目标字符串中的任何位置,则返回值为 true;否则为 false。
  • 如果找到匹配项,则匹配结果将保存在提供的 std::match_results 对象中。

示例 1

让我们举一个例子来说明 C++ 中的 std::regex_search() 方法。

输出

 
Match found: quick brown
Captured group: brown   

说明

在此示例中,在目标字符串中搜索模式 "quick (word)"。如果找到匹配项,则打印整个匹配项和捕获组的内容。std::regex_search 是 C++ 中的一个核心模式匹配工具,它使程序员能够使用正则表达式执行复杂的字符串搜索和操作。

示例 2

让我们再举一个例子来说明 C++ 中的 std::regex_search() 方法。

输出

 
Words with 4 letters found: over lazy   

说明

  • 我们的目标字符串中有一个句子。
  • 匹配四个字母的单词是正则表达式模式 \\b\\w{4}\\b。
  • 对于在目标字符串中找到的每个匹配项,我们使用 std::sregex_iterator 对其进行迭代。
  • 我们使用 std::smatch 来提取并打印每个匹配项的匹配单词。

示例 3

让我们再举一个例子来说明 C++ 中的 std::regex_search() 方法。

输出

 
Input text: Find sub words such as subject, submarine, and subsequence.
Regular expression pattern: /\b(sub)(\w*)/
Matching results:
sub sub  
subject sub ject 
submarine sub marine 
subsequence sub sequence   

结论

总之,给定代码演示了如何在 C++ 中使用 std::regex_search 从给定文本中提取特定模式(如数字)。正则表达式允许开发人员轻松定义复杂的搜索模式,并提供强大的文本处理功能。此代码演示了 std::smatch 的简单工作流,用于提取匹配的子字符串,std::sregex_iterator 用于迭代匹配项,并初始化输入文本和正则表达式模式。总的来说,std::regex_search 是一个有用的工具,适用于需要在文本处理应用程序中进行模式匹配和提取的任务,因为它使 C++ 开发人员能够高效地执行复杂的字符串操作。