QRegularExpressionrx("^(?![\\p{P}\\p{S}])[\u4e00-\u9fa5]+$");
QRegularExpression rx("^(?![\\p{P}\\p{S}])[\u4e00-\u9fa5]+$");
QFile file("C:/Users/Administrator/Documents/testconsole/t.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return -1;
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
qDebug()<<line<<rx.match(line, 0, QRegularExpression::PartialPreferCompleteMatch).hasMatch();
}
input:
!¥…()—【;:“‘、《,。?、中国人abcdefg
人人影视abc
少年强
中
abc你丫丫
output:
"!¥…()—【;:“‘、《,。?、中国人abcdefg" false
"人人影视abc" false
"少年强" true
"中" true
"abc你丫丫" false
《1》负预测模式
(?!模式) | 负预测先行。 匹配与模式 不匹配的搜索字符串。 找到一个匹配项后,将在匹配文本之前开始搜索下一个匹配项。 不会保存匹配项以备将来之用。 | \b(?!th)\w+\b 与不以“th”开头的单词匹配。 在该模式中,\b 与一个字边界匹配。 对于搜索字符串“ quick ”,这与第一个空格匹配。 (?!th) 与非“th”字符串匹配。 这与“qu”匹配。 从该匹配项开始,\w+ 与一个字匹配。 这与“quick”匹配。 |
http://stackoverflow.com/questions/2078915/a-regular-expression-to-exclude-a-word-string
《2》unicode属性
\p{P}
|
小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。中括号内的“P”表示Unicode 字符集七个字符属性之一:标点字符。
其他六个属性:
P: 标点符号
L:字母;
M:标记符号(一般不会单独出现);
Z:分隔符(比如空格、换行等);
S:符号(比如数学符号、货币符号等);
N:数字(比如阿拉伯数字、罗马数字等);
C:其他字符。
*注:此语法部分语言不支持,例:javascript。
|
《3》 中文的unicode范围
匹配中文字符的正则表达式: [u4e00-u9fa5]
《4》^ 匹配开头
《5》$匹配结尾
《6》+ 表示1个及1个以上重复
《7》 因为网上搜索到的 汉字正则表达式[\u4e00-\u9fa5],包含了全角符号。项目要求不包含符号,则使用了负预测,判断是符号[\\p{P}\\p{S}]马上认为预测失败。