重复:There is a function to use pattern matching (using regular expressions) in C++?
我不确定在哪里使用它...是否有任何解析器类型的函数将一些正则表达式作为参数或什么?我刚刚发现我的编辑器会突出显示一行/作为C / C ++语法的“正则表达式”,我认为这很奇怪......
答案 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更慢。它虽然很容易使用。