为什么在Qt 5.1.0候选版本中,函数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"谢谢
发布于 2013-06-25 00:28:20
对于\s,QRegExp使用Unicode“分隔符”类别。这包括\v。
QRegularExpression是一个围绕PCRE的包装器,其中文档声明(http://pcre.org/pcre.txt):
为了与Perl兼容,
\s与VT字符(代码11)不匹配。这使得它不同于POSIX "space“类。\s字符为HT (9)、LF (10)、FF (12)、CR (13)和空格(32)。如果Perl脚本中包含"use locale;“,\s可能与VT字符匹配。在PCRE中,它永远不会。
尽管文档说它永远不会与\v匹配,但是您可以尝试将UseUnicodePropertiesOption选项传递给QRegularExpression,这会更改字符类以使用Unicode属性,因此从理论上讲,除非在PCRE中内置了特定的异常,否则\s应该与\v匹配。
如果做不到这一点,您可以使用(\h|\v) (以C++字符串形式,也就是"(\\h|\\v)"),使用PCRE的特殊“水平空间”和“垂直空间”类。
https://stackoverflow.com/questions/17280005
复制相似问题