gpt4 book ai didi

c++ - QString::replace(const QRegExp &, const QString &) 和 QString::replace(const QRegularExpression &, const QString &) 工作方式不同

转载 作者:行者123 更新时间:2023-11-30 04:17:08 28 4
gpt4 key购买 nike

为什么 Qt 5.1.0 Release Candidate 函数 QString::replace(const QRegExp & rx, const QString & after) 以某种方式处理\v 而 QString::replace(const QRegularExpression & re, const QString & after) ) 用另一种方式?这就是我使用的代码的和平:

QString ss("a\t\v  bc \t cdef\vg\r\r\t hi");
QString ss1(ss);
ss1.replace(QRegExp("\\s{2,}"), " ");
QString ss2(ss);
ss2.replace(QRegularExpression("\\s{2,}"), " ");

调试器的值是:

ss  "a\t\013  bc \t cdef\013g\r\r\t hi"
ss1 "a bc cdef\013g hi"
ss2 "a\t\013 bc cdef\013g hi"

谢谢

最佳答案

QRegExp 为 \s 使用 Unicode“分隔符”类别。这包括 \v

QRegularExpression 是 PCRE 的包装器,文档指出 (http://pcre.org/pcre.txt):

For compatibility with Perl, \s does not match the VT character (code 11). This makes it different from the the POSIX "space" class. The \s characters are HT (9), LF (10), FF (12), CR (13), and space (32). If "use locale;" is included in a Perl script, \s may match the VT charac- ter. In PCRE, it never does.

尽管文档说它永远不会匹配 \v,您可以尝试将 UseUnicodePropertiesOption 选项传递给 QRegularExpression,它会更改字符类以使用 Unicode 属性,所以理论上,除非 PCRE 内置了特定的异常,否则 \s 应该匹配 \v

否则,您可以使用 (\h|\v)(C++ 字符串形式为 "(\\h|\\v)"),使用PCRE 的特殊“水平空间”和“垂直空间”类。

关于c++ - QString::replace(const QRegExp &, const QString &) 和 QString::replace(const QRegularExpression &, const QString &) 工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17280005/

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