【问题标题】:regular expressions in c++ with a GNU project C and C++ compiler带有 GNU 项目 C 和 C++ 编译器的 c++ 中的正则表达式
【发布时间】:2011-12-27 02:08:07
【问题描述】:

我正在尝试用 C++ 编写正则表达式,但我不断收到编译错误。我浏览了网络,但找不到答案。

我复制粘贴了一个示例,例如:

#include <iostream>
#include <tr1/regex>  //<regex> didn't compile
#include <string>
using namespace std;
int main(int argc, char **argv) {
    string str = "127.0.0.1";
    std::tr1::regex rx("127.0.0.1");
    regex_match(str.begin(), str.end(), rx);
    return 0;
} 

我收到/tmp/cc0zldN2.o: In function std::tr1::basic_regex&lt;char, std::tr1::regex_traits&lt;char&gt; &gt;::basic_regex(char const*, unsigned int)':.... undefined reference to std::tr1::basic_regex&lt;char, std::tr1::regex_traits&lt;char&gt; &gt;::_M_compile()...

据我所知,Windows 中使用了这种语法。我正在使用带有 GNU 项目 C 和 C++ 编译器的 linux。 有人引用了与我的编译器匹配的正则表达式示例吗?

谢谢!

【问题讨论】:

  • ....... 是重要的部分。永远不要不显示完整的错误消息。
  • 关于示例。您是否必须比较字符串或实际解析 IP?您尝试实现它的方式,由于. 匹配任何字符 - 而不仅仅是.,它将匹配更多的纯IP。如果您只想匹配 .,请将其转义 (\.)。
  • 适用于 gcc 4.7(使用 std::regex :)
  • 这只是一个尝试编译一些模式的例子..我知道它不适用于匹配 ips..
  • 在 4.7 中?很好,我想我只尝试了 4.6。稍后再看看。

标签: c++ regex


【解决方案1】:

上次我检查时(大约半年前),GCC 没有实际的 TR1 实现。无论出于何种原因,他们添加了标头,但跳过了实现(而不是添加某种警告或错误(或者根本不部署标头))。

如果您不必使用 GCC,使用 MSVC,他们有一个完整的实现,或者使用提供正则表达式的替代库(PCRE、GNU 的(不记得它的名字)、SLRE 等.).

【讨论】:

  • 我必须使用 g++.. 这是我正在学习的课程的一部分.. 任何其他建议,或者我将跳过使用正则表达式..?
  • 跳过正则表达式或使用上面列出的库之一(除非您不允许这样做)。它们相当容易使用。请问这是什么课程?如果它是某种 C++ 初学者,你很可能打算使用直接字符串访问/修改来实现它。
  • 当然可以。但是,每台编译代码的计算机也都需要 boost 文件。根据您的意图,这可能是“矫枉过正”。您可以只使用strtol() 逐字节解析IP,而不必担心任何正则表达式或依赖关系。
  • 感谢您的帮助。最后一件事,你有推荐的boost库教程/参考吗?
  • 官方文档应该包含足够的示例来开始使用(实际上,实现与TR1几乎相同;只是使用了不同的命名空间)。
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 2015-01-11
  • 2023-04-10
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2018-09-22
  • 2011-04-16
相关资源
最近更新 更多