是否有可能在c ++中使用正则表达式?

时间:2009-05-02 19:19:56

标签: c++ c regex

重复:There is a function to use pattern matching (using regular expressions) in C++?

我不确定在哪里使用它...是否有任何解析器类型的函数将一些正则表达式作为参数或什么?我刚刚发现我的编辑器会突出显示一行/作为C / C ++语法的“正则表达式”,我认为这很奇怪......

10 个答案:

答案 0 :(得分:18)

在vanilla C ++语言中,不支持正则表达式。但是,有几个库可用于支持Regex。 Boost很受欢迎。

查看Boost的Regex实现。

答案 1 :(得分:8)

PCRE是C的事实上的标准正则表达式库(它也适用于C ++)。

(你的编辑正在做什么我不知道。使用像PCRE这样的库或任何其他建议的库都不会改变C的语法 - 你的正则表达式定义将永远保存在字符串中。)

答案 2 :(得分:2)

答案 3 :(得分:2)

正则表达式是TR1(see Chapter 7 in Documentation)中定义的C ++标准库扩展的一部分。 dinkumware library已经实现了regEx扩展。我不知道其他实现。

扩展程序简单易用。

答案 4 :(得分:1)

Boost.Xpressive允许您将正则表达式作为字符串(如Boost.Regex)或静态表达模板编写。对于语法来说,它类似于Boost.Spirit

例如,这两个是等价的:

sregex rex1 = sregex::compile("(\\w+) (\\w+)!"); //normal string based way
sregex rex2 = (s1= +_w) >> ' ' >> (s2= +_w) >> '!'; //expression template way

答案 5 :(得分:1)

为了完整起见,Qt有QRegExp可以进行正则表达式匹配 如果您需要在大型Qt应用程序中使用小型正则表达式来实现远程功能,这通常很好。对于任何更严重的事情,PCRE绝对是最佳选择。

答案 6 :(得分:1)

不,C ++没有,也不会使用某些语言中使用的/.../语法获得正则表达式。你的编辑错了。

正如所有其他答案所示,C ++的正则表达式库确实存在(并且一个计划包含在C ++ 0x中),但是它们处理字符串,由“而不是斜线”分隔,所以它们不是你的理由编辑的行为。

答案 7 :(得分:1)

如果您使用visual studio并且可移植性不是主要问题,您可以使用名为CAtlRegExp的可爱ATL工具快速获得结果(无下载,无安装)。它包含完整而有效的RegEx解析和匹配(online sample)。但是,没有将其性能与BOOST进行比较。

答案 8 :(得分:0)

我不认为你可以在不使用某些第三方库的情况下在C ++中执行正则表达式。 Qt和Gtk + / Gtkmm都带有这些。 Visual C ++ 2008也具备此功能。

答案 9 :(得分:0)

如果你在Visual Studio中,你可以使用Greta(搜索greta regex),但我认为它比boost更慢。它虽然很容易使用。