[英]QString::replace(const QRegExp &, const QString &) and QString::replace(const QRegularExpression &, const QString &) work differently
為什么使用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 ):
為了與Perl兼容,\\ s與VT字符(代碼11)不匹配。 這使其不同於POSIX“空間”類。 \\ s字符是HT(9),LF(10),FF(12),CR(13)和空格(32)。 如果“使用語言環境”; 包含在Perl腳本中,\\ s可能與VT特性匹配。 在PCRE中,它永遠不會這樣做。
盡管文檔說它永遠不匹配\\v
,但是您可以嘗試將UseUnicodePropertiesOption
選項傳遞給QRegularExpression,該選項會將字符類更改為使用Unicode屬性,因此,從理論上講,除非PCRE內置了特定的異常,否則\\s
應該匹配\\v
。
否則,可以使用PCRE的特殊“水平空間”和“垂直空間”類使用(\\h|\\v)
(C ++字符串形式為"(\\\\h|\\\\v)"
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.