2

此代码没有返回任何内容,我是否以错误的方式转义 w 字符?

http://liveworkspace.org/code/3bRWOJ 38 美元

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



int main()
{
    const char *reg_esp = "\w";  // List of separator characters.

// this can be done using raw string literals:
// const char *reg_esp = R"([ ,.\t\n;:])";

std::regex rgx(reg_esp); // 'regex' is an instance of the template class
                         // 'basic_regex' with argument of type 'char'.
std::cmatch match; // 'cmatch' is an instance of the template class
                   // 'match_results' with argument of type 'const char *'.
const char *target = "Unseen University - Ankh-Morpork";

// Identifies all words of 'target' separated by characters of 'reg_esp'.
if (std::regex_search(target, match, rgx)) {
    // If words separated by specified characters are present.

    const size_t n = match.size();
    for (size_t a = 0; a < n; a++) {
        std::string str (match[a].first, match[a].second);
        std::cout << str << "\n";
    }
}

    return 0;
}
4

2 回答 2

9

正则表达式应包含\w,由两个字符\和组成w,因此您的 C++ 源代码应包含"\\w"您需要转义反斜杠的内容。

于 2013-04-14T11:22:49.713 回答
4

正如@DanielFrey 所说,对于普通的字符串文字,您必须将反斜杠加倍。使用 C++11,您可以改用原始字符串文字:R"(\w)". 'R' 关闭特殊字符的处理,所以反斜杠只是一个反斜杠。括号标记原始字符串文字的开头和结尾,而不是文本的一部分。

于 2013-04-14T12:09:12.737 回答