Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++/STL字符串:如何用通配符模拟类似正则表达式的函数?_C++_String_Stl_Wildcard - Fatal编程技术网

C++ C++/STL字符串:如何用通配符模拟类似正则表达式的函数?

C++ C++/STL字符串:如何用通配符模拟类似正则表达式的函数?,c++,string,stl,wildcard,C++,String,Stl,Wildcard,我想用通配符比较4个字符的字符串 例如: std::string wildcards[]= {"H? ", "RH? ", "H[0-5] "}; /*in the last one I need to check if string is "H0 ",..., and "H5 " */ 是否有可能仅通过STL实现 谢谢, 阿曼 编辑: 没有boost.regex我们能做到吗? 或者我应该向我的项目中添加另一个库依赖项吗?:)否-您需要boost::regex使用正则表达式就是为这类事

我想用通配符比较4个字符的字符串

例如:

std::string wildcards[]=
{"H?  ", "RH? ", "H[0-5]  "};
/*in the last one I need to check if string is "H0  ",..., and "H5  " */
是否有可能仅通过STL实现

谢谢, 阿曼

编辑:

没有boost.regex我们能做到吗?

或者我应该向我的项目中添加另一个库依赖项吗?:)

否-您需要boost::regex

使用正则表达式就是为这类事情设计的。我可以理解你不愿意避免依赖,但在这种情况下,这可能是合理的

<>你可以检查C++编译器,看看它是否包含任何内置的正则表达式库。例如,微软包括


除此之外,您的问题似乎不太难为其编写自定义代码。

您可以在不引入新的库依赖项的情况下完成这项工作,但要做到这一点,您必须自己编写正则表达式引擎(或至少编写正则表达式引擎的子集)


有什么原因你不想使用库来实现这一点吗?

你的意思是
std::string wildcards[]={…
?你说的“只使用STL”是什么意思?如果你只想处理基本的全局搜索,那么你应该可以使用基于
for
循环的简单方法如果X不是一种语言功能,那么“是否可以在语言X中执行Y”通常是肯定的。即使这样,你通常也可以找到解决方法。因此,是的,很可能。当涉及到如何执行建议时,我认为我们需要更清楚、更详细地描述该问题。@David:谢谢你注意到它:)(更正)Boost.Xpressive呢?(我不知道它是什么,但谷歌会弹出它)@Arman:我会选择Boost.Regex,因为C++0x草案Regex是基于it@Stephan:这是否意味着在不久的将来,我可以将boost::regex改为std::tr1::regex或类似的东西?@Arman:str::tr1::regex已经作为功能包成为gcc和MSVC 2008的一部分。将来,如果IIRC的话,它将只是
包含
。@Stephan:不幸的是,功能包不支持MSVC2008 Express。@马克:谢谢你的回答。实际上,代码是独立于平台的。目前它使用多个strcmp,但这种方式是不可扩展的。@Joe:是的,你是对的,在我看来,我需要在这里包括Boost.Regex。代码是纯C++/STL的,并且是可移植的。有时在不同的t机器没有安装BOOST。如果您需要在没有BOOST的机器上进行编译,您可以提取BOOST regex头文件和源文件,并将它们直接集成到您的项目中。我想我记得在某个时候在BOOST用户邮件列表中看到过这样做的讨论。是的,这是真的,这是bcp工具。