c+中的正则表达式+;GNU项目C和C++;编译程序 我试图在C++中编写正则表达式,但我一直在编译错误。我浏览了网页,但找不到答案
我复制粘贴了一个示例,例如:c+中的正则表达式+;GNU项目C和C++;编译程序 我试图在C++中编写正则表达式,但我一直在编译错误。我浏览了网页,但找不到答案,c++,regex,C++,Regex,我复制粘贴了一个示例,例如: #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");
#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;
}
#包括
#include//未编译
#包括
使用名称空间std;
int main(int argc,字符**argv){
字符串str=“127.0.0.1”;
std::tr1::正则表达式rx(“127.0.0.1”);
正则表达式匹配(str.begin(),str.end(),rx);
返回0;
}
我在函数std::tr1::basic_regex::basic_regex(char const*,unsigned int)中得到了/tmp/cc0zld2.o:。。。。对std::tr1::basic_regex::_M_compile()的未定义引用…
据我所见,这种语法在windows中使用。我使用Linux和GNU项目C和C++编译器。
有人引用过与我的编译器匹配的正则表达式示例吗
谢谢 上次我检查时(大约半年前),GCC没有实际的TR1实现。无论出于何种原因,他们添加了头,但跳过了实现(而不是添加某种警告或错误(或者干脆不部署头))
如果您不必使用GCC、MSVC,那么它们已经有了完整的实现,或者使用提供正则表达式的替代库(PCRE、GNU one(不记得它的名称)、SLRE等)。重要的部分是
…
。永远不要显示完整的错误消息。关于示例。您需要比较字符串还是实际解析IP?按照您尝试实现它的方式,它将比纯IP匹配更多,因为
匹配任何字符,而不仅仅是
。如果您只想匹配一个
,请将其转义(\.
)。GCC4.7(使用std::regex:)可以正常工作。这只是一个尝试编译某些模式的示例。。我知道它对匹配的IP无效。它在4.7中?很好,我想我只试了4.6。稍后再看。我必须使用g++。。这是我所学课程的一部分。。还有其他建议吗,否则我将跳过正则表达式的使用…?跳过正则表达式或使用上面列出的库之一(除非您不允许这样做)。它们很容易使用。请问这是什么课程?如果它是初学者C++,你很有可能用直接的字符串访问/修改来实现它。当然,它会起作用。但是,编译代码的每台计算机也需要boost文件。不过,这可能是“过度杀伤力”,这取决于你打算做什么。您可以使用strtol()
逐字节解析IP,而不必担心任何正则表达式或依赖项。谢谢您的帮助。关于最后一件事,你有推荐的boost库教程/参考资料吗?官方文档应该包含足够的示例来开始(实际上,实现与TR1几乎相同;只是使用不同的名称空间)。