在 C++ 中有一个使用模式匹配(使用正则表达式)的函数吗?

Posted

技术标签:

【中文标题】在 C++ 中有一个使用模式匹配(使用正则表达式)的函数吗?【英文标题】:There is a function to use pattern matching (using regular expressions) in C++? 【发布时间】:2008-11-30 22:34:26 【问题描述】:

有一个简单的 C++ 方法可以在字符串上使用模式匹配吗?代码应该是这样的:

if (regexpcmp("l?nole*[0-9]", "linoleum1")) 
  //we have a match!
 else 
   //no match 

【问题讨论】:

【参考方案1】:

你已经看过Boost.Regex了吗?

const boost::regex e("l?nole*[0-9]");
if (regex_match("linoleum1", e)) 
  //we have a match!
 else 
  //no match 

【讨论】:

【参考方案2】:

不在核心语言中。使用 Boost.Regex 或像 pcre 这样的外部库。在 unix 环境中,您几乎可以肯定可以访问 BSD 正则表达式工具(regcompregerrorregexecregfree),它们是类 c 而不是类 c++,但确实有效。

【讨论】:

我在 *nix 环境中,所以我将使用 BSD 正则表达式工具,如本页底部的示例 opengroup.org/onlinepubs/000095399/functions/regcomp.html【参考方案3】:

以 boost.regex 为好友。如果不允许你使用 boost(遗憾的是,仍然有公司这样做),你可以查看 pcrecpp,这是 google 为著名的 PCRE 库开发的 C++ 绑定。

【讨论】:

哈哈。如果您不允许使用 3rd 方库,那么您只需使用 3rd 方库 :-) 这样的公司很愚蠢。 什么,比如谷歌?其发布的编码标准仅允许使用 Boost 中的一些特定内容。他们一定像亿万富翁一样愚蠢;-)【参考方案4】:

如果您使用最常用编译器的最新版本:std::tr1::regex,则可以在 TR1 命名空间中使用标准正则表达式库(基于 boost::regex)。

【讨论】:

以上是关于在 C++ 中有一个使用模式匹配(使用正则表达式)的函数吗?的主要内容,如果未能解决你的问题,请参考以下文章

面试题19:正则表达式匹配(C++)

如何使用模式匹配器仅获取与 Java 中正则表达式匹配的第一行?

用于匹配单词的 javascript 正则表达式模式,具有自定义单词边界

C++ 正则检测字串,提取数字以及字符

6.正则表达式

快速学习正则表达式,不用死记硬背,示例让你通透(上篇)