为什么std :: regex_match不能用$ pattern返回true?

时间:2016-10-22 05:11:32

标签: c++ regex exception string-matching

std::regex_replace
我可以使用“$”匹配单词的结尾,然后附加其他字符。

std::cout << std::regex_replace("word",std::regex("$"),"s") << '\n';
//prints: words

由于结果与原始输入不同,我假设正则表达式已匹配。

然而,

std::cout << std::boolalpha;
std::cout << std::regex_match("word",std::regex("$")) << '\n';
//prints: false

如何使正则表达式不匹配,但是regex_replace能够替换吗?

我还尝试为0个或多个字符添加*,但这引发了异常:

  std::cout << std::regex_match("word",std::regex("*$")) << '\n';
  std::cout << std::regex_replace("word",std::regex("*$"),"s") << '\n';

1 个答案:

答案 0 :(得分:1)

  

请注意,regex_match只会将正则表达式与整个字符序列成功匹配,而std :: regex_search将成功匹配子序列。

您希望regex_search匹配子序列。 $与非空字符串的整体不匹配,但与非空字符串的(零长度)子字符串匹配。