我正在使用正则表达式
“\ X1B [([0-9] {1,2}(; [0-9] {1,2}))?[M | K]”
从字符串中剥离ANSI控制代码。这对sed工作得很好,但如果我将该字符串提供给QRegularExpression,则无法匹配控制字符。我尝试过使用QRegularExpression :: escape()函数;试图逃避领先的'\ x1B';尝试在其位置使用'\ e',但都无济于事。
答案 0 :(得分:0)
试试这个
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const char data[] = "some \x1b[31;1mtext";
QRegularExpression re("\\x1B\\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]");
QRegularExpressionMatch match = re.match(data);
if (!re.isValid()) {
std::cout << "not valid" << std::endl;
}
if (match.hasMatch()) {
std::cout << "matched" << std::endl;
}
return 0;
}
您应该转义[
("\\["
)之类的符号。您可以在"\x1b"
中使用"\\x1b"
和QRegularExpression
(在第一种情况下,它只是0x1b
符号)。
答案 1 :(得分:0)
您可以使用原始字符串文字并忘记转义正则表达式转义的问题:
auto re = QRegularExpression { R"\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mK]" };
此处,每个\
都被视为字面反斜杠。
另请注意 [m|K]
匹配 3 个字符:m
,K
和 {{ 1}}。在正字符类中,字符为 OR -ed,|
被解析为文字符号。