您将如何处理字符串通配符,而不仅仅是比较正确的值?

Posted

技术标签:

【中文标题】您将如何处理字符串通配符,而不仅仅是比较正确的值?【英文标题】:How would you approach string wildcards, without just comparing the correct values? 【发布时间】:2011-04-23 21:14:45 【问题描述】:

我注意到 C++ 没有标准形式的正则表达式。虽然检查匹配值的方法有很多种,但是当您需要复杂的公式来比较一个值与另一个值,而不是嵌套 IF 子句或极长的 OR 语句时,会发生什么?

简而言之,您将如何处理与 C++ 的正则表达式样式比较?

编辑:没有外部库,我有点新手。

【问题讨论】:

“外部库”我假设您的意思是“我的编译器/操作系统不附带的库”。您能告诉我们您使用的是哪种编译器/操作系统组合吗? 我主要使用 ArchLinux 和 Windows。如果有任何可用的选项,我也可以访问 BSD 系统。 什么编译器,包括版本号?我很确定 Microsoft Visual Studio 2010 包含 std::tr1::regex。我不确定 ArchLinux,但我知道 Ubuntu 10.04.2LTS 通过“apt”命令同时提供 boost::regex 和 std::tr1::regex。 根据this page Arch Linux 上的 gcc 4.6.0-3 包括对 std::tr1::regex 的支持。 关于编辑:你为什么不使用外部库? C++ 并非旨在拥有特别丰富的标准库。你应该使用外部库来扩展它的功能(如果你希望你的应用程序是可移植的,最好是可移植的)。如果正则表达式解决了您的问题,请使用它们,但也可以考虑实现其他有用的字符串函数——例如。 Python 甚至做了很多字符串操作,我很少使用正则表达式。例如,用于拆分字符串并返回字符串向量的 C++ 函数不是非常惯用的 C++,但可以完成工作。 【参考方案1】:

您只需查看Boost.Regex,或者在一些现代编译器和库中查看std::tr1::regex。

您可能还想考虑使用Perl-Compatible Regular Expressions 库,PCRE。

编辑:您对问题的澄清要求不使用任何外部库,最终会增加您将要做的工作量。这里是Rob Pike's regex matching code,这可能是你努力的一个好的开始。

【讨论】:

【参考方案2】:

简而言之,Boost.Regex 或 std::tr1::regex。

【讨论】:

【参考方案3】:

查看http://www.pcre.org/。

【讨论】:

以上是关于您将如何处理字符串通配符,而不仅仅是比较正确的值?的主要内容,如果未能解决你的问题,请参考以下文章

c# FileSystemWatcher如何处理多个文件?

5 月 1 日之后,我们将如何处理 jcenter() 存储库以及它的替代方案是啥?

我将如何处理此链接器错误?

C++ 到 C# 移植问题:我将如何处理具有 double* 作为参数的方法?

http 服务器将如何处理 html5 网络套接字?

当循环中调用了异步函数时,Node.JS 将如何处理循环控制?