【问题标题】:How to match "\n" in Poco::RegularExpression C++?如何在 Poco::RegularExpression C++ 中匹配“\n”?
【发布时间】:2017-08-09 17:03:35
【问题描述】:

我当前的代码是:

#include <iostream>
#include <Poco/Foundation.h>
#include <Poco/RegularExpression.h>

int main()
{
    Poco::RegularExpression regex("[A-Z]+\s+[A-Z]+");
    Poco::RegularExpression::MatchVec mvec;
    constad std::string astring = "ABC\nDEFG";

    int matches = regex.match(astring,0,mvec);

    std::cout << "Hello World\n";

    return 0;
 }

我试图匹配的字符串中'\n' 的位置可以是单个空格、多个空格或换行符(因此我使用空白元字符)。

返回的匹配数为零。我需要设置一个标志吗?

【问题讨论】:

  • 加倍反斜杠,因为\s 不是字符串文字中可识别的转义序列。
  • 这不是 line-end $ 的正则表达式吗?

标签: c++ regex pcre poco-libraries


【解决方案1】:

问题在于您的正则表达式中的转义序列。

在这种情况下,您想在字符串 astring 中添加一个反斜杠 (\),使用标记 \s,但在 C/C++ 或 Java 中,它必须写为双 \\。因此,要解决您的问题,您必须添加另一个反斜杠:

Poco::RegularExpression regex("[A-Z]+\\s+[A-Z]+");

在这里你可以找到参考:

http://en.cppreference.com/w/cpp/language/escape

【讨论】:

    【解决方案2】:

    这应该可以工作

    Poco::RegularExpression s ("\\s"); // White char
    Poco::RegularExpression n ("\\n"); // New line
    Poco::RegularExpression r ("\\r"); // Carrige return
    Poco::RegularExpression t ("\\t"); // Tabulator
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2015-07-04
      • 2019-06-10
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多