【问题标题】:How to use <regex> in C++11如何在 C++11 中使用 <regex>
【发布时间】:2013-05-03 01:16:25
【问题描述】:

我正在尝试使用正则表达式来接受具有类似序列的字符串

ifelseifelseififif

所以每个 else 都需要一个 if,但不是每个 if 都需要一个 else。我知道我可以用笔和纸用像这样的简单正则表达式 ((if)*+(ifelse)*)* 来做到这一点。现在我不确定我是否能够用这个库来做到这一点,因为我以前从未使用过它。那么是否可以像我上面写的那样基于正则表达式接受或拒绝一个字符串?

我写这个示例是为了弄湿我的脚,但我不明白为什么它返回 false。 regex_search() 不应该找到子字符串匹配吗?那 sn-p 每次都打印 nope。

#include <regex>
#include <iostream>
using namespace std;

int main(){
  string sequence="ifelse";
  regex rx("if");
  if(regex_search(sequence.begin(),sequence.end(),rx)){
    cout<<"match found"<<endl;
  }else{
    cout<<"nope"<<endl;
  }
}

我正在使用 g++ 4.7 并尝试使用 g++ -std=gnu+11 reg.cpp 和 g++ -std=c++11 reg.cpp 进行编译

【问题讨论】:

  • 尚未完全支持,考虑到 。成功了,看看这个post。
  • @gongzhitaao - “尚未完全支持”并不公平。那里没有什么有用的,无用的&lt;regex&gt; 标头不应该被放入 gcc 的库实现中。

标签: c++ regex c++11


【解决方案1】:

如果您使用 g++ 进行编译,可能是因为 regex 尚未完全支持。有关 g++ 中当前 C++11 的状态,请参阅 here。

【讨论】:

  • 我在上面添加了我的编译器标志,我想我会尝试用 g++ 切换到 Visual Studio 而不是 emacs
  • @TylerPfaff 没必要过激。您可以只使用 boost/regex 或其他可用的 regex 实现之一。
【解决方案2】:

这会打印“找到匹配”,我只是运行它。如果您不使用 c++11,它将无法编译,但这是我编译它的方式。 clang++ -std=c++11 -stdlib=libc++ reg.cpp

【讨论】:

  • 我在上面添加了我的编译器标志,我想我会尝试用 g++ 切换到 Visual Studio 而不是 emacs
  • 一般你需要使用标志 -stdlib=libc++
  • @aaronman libc++ 在使用 clang 时几乎只是 OSX 上的一个选项。
  • 你将如何在 linux 或 windows 上使用 c++11 库而不是。
猜你喜欢
  • 2010-09-19
  • 2013-07-20
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 2012-05-11
  • 1970-01-01
相关资源
最近更新 更多