在 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 正则表达式工具(regcomp
、regerror
、regexec
、regfree
),它们是类 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++ 中有一个使用模式匹配(使用正则表达式)的函数吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模式匹配器仅获取与 Java 中正则表达式匹配的第一行?