gpt4 book ai didi

regex - 为什么 QString 不能传递形式为 ("[\\x00-\\xff]*") 的 QRegExp?

转载 作者:行者123 更新时间:2023-12-02 08:34:51 26 4
gpt4 key购买 nike

我有具有以下模式的 QRegExp

QRegExp byteArray;
byteArray.setPattern("[\\x00-\\xff]*");

这是用于验证QString 的模式。有人可以提供示例,说明哪种 QString 无法通过上述模式的测试吗?我有一个错误,其中有一个与模式不匹配的 QString。

这个模式能匹配任何 Unicode 字符串吗?

未通过模式验证的 QString 示例:HÈńr

为什么?

最佳答案

QString 在内部使用 UTF-16,而不是 UTF-8。

对于 QRegExp,您还需要从\x0001 开始。

int main()
{
uint data[] = { 0x10c436, 0 };
QString s = QString::fromUcs4(data);
QRegExp r("^[\\x0001-\\xffff]+$");
qDebug() << s.size() << s.contains(r);
}

将导致匹配,

2 true

注意:如果您使用的是 QRegularExpression,则以上内容将不再匹配。 QRegularExpression 使用 pcre UTF16 因此必须在 PCRE 代码中进行一些花哨的检查,尽管它没有报告任何错误。我没有进一步研究它。

此外,QRegularExpression 接受\x0000,但 QRegExp 不接受。

这个故事的寓意是不要试图用正则表达式来匹配二进制数据。

关于regex - 为什么 QString 不能传递形式为 ("[\\x00-\\xff]*") 的 QRegExp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com