qt QRegularExpression 中文不包括“标点符号 特殊字符“ 的正则表达式

6 篇文章 1 订阅

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”匹配。

https://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.100).aspx

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。
http://www.regular-expressions.info/unicode.html

《3》 中文的unicode范围

匹配中文字符的正则表达式: [u4e00-u9fa5] 


《4》^ 匹配开头


《5》$匹配结尾


《6》+ 表示1个及1个以上重复


《7》 因为网上搜索到的 汉字正则表达式[\u4e00-\u9fa5],包含了全角符号。项目要求不包含符号,则使用了负预测,判断是符号[\\p{P}\\p{S}]马上认为预测失败。



  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值