带有反向引用的正则表达式在C++中不匹配
Regex with backreference won't match in C++
我正在尝试在C++中匹配 4 个相等的字符。
这些应该匹配 = KQQQQ, ZZZZQ
这是我到目前为止尝试过的:
std::string mano_to_reg = "KQQQQ";
std::regex pokar("(.)1{3}");
std::smatch match;
std::cout << "match = " << std::regex_match(mano_to_reg, match, pokar) << "n";
但它不会匹配。
我也试过std::regex_search
,但它也不会匹配。
我尝试使用基本语法和扩展语法
我也尝试将我的模式更改为"(.)1{4}"
、"((.)1{3})"
以及这些的所有其他组合。
我尝试将其他模式与其他字符串匹配,其中大多数都可以工作。似乎问题是反向引用,但我到处寻找,找不到为什么它不匹配。
我在OS X 10.11.3上使用clang++ 7.0.2,带有-std=c++11 -stdlib=libc++标志。
我也尝试过使用 -std=c++11 -std=gnu++11 标志的 g++ 5.3.0。
你有两个问题:
- 你需要逃离
.正则表达式
(.)1{3}
是正确的,但是为了将其存储在字符串文本中,您需要对其进行转义,以便对其进行"(.)\1{3}"
。 - 您可能想要
std::regex_search
而不是std::regex_match
。字符串"KQQQQ"
与正则表达式(.)1{3}
不匹配,但子字符串"QQQQ"
匹配。
以下程序:
#include <iostream>
#include <regex>
#include <string>
int main() {
std::string mano_to_reg = "KQQQQ";
std::regex pokar("(.)\1{3}");
std::smatch match;
std::cout << "match = " << std::regex_match(mano_to_reg, match, pokar) << "n";
std::cout << "search = " << std::regex_search(mano_to_reg, match, pokar) << "n";
}
输出:
match = 0
search = 1
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- 模板专用化与派生类不匹配