您的位置:首页 > 其它

QRegExp一些注意事项(正则表达式和模式匹配)

2016-06-17 16:35 357 查看
某些字符代表的非本身意义(即有特殊意义):如:^、-、*等,要表示本身意义时,需要在前面加"\"。
某些字符代表其本身意义,但是加上"\"后有特殊意义,如:\n、\r、\t、\v、\a、\f等。
qt本身为c++语言,在c++中"\"用来escape(转义),表示其本身是需要转义的,故在一个正则表达式中包含“\”需要在“\\”。(提示:因为c++有定义自己的转义序列,当和qt的相同时只用"\",比如第二条提到的那六个,但是为了方便,都用"\\")
c++中以"\"开头,后面紧跟1个、2个或者3个数字表示的是八进制数,而在QRegExp中"\0"开头才是表示八进制数。QRegExp中"\i"表示反向引用,即与前面的第i个分组完全相同。如:\\b(\\w+)\\s+\\1\\b,其中\\1就是和\\w+的匹配东西完全相同, 故匹配的字符串可以是go go或者litter   litter等。
可以用()来分割成各个组,QRegExp的cap()函数默认是会捕捉各个小组,若是()不想被捕捉,即可用(?:表达式)格式。
 "^"表达式表示以该表达式开头,如^#include就是以#include开头。但是当[^abc]表匹配除了a、b、c字符外所有的字符。(有点特殊)
小写为肯定,大写为否定。如:\d表示数字,\D则表示非数字。
exactMatch("表达式")函数匹配相当于indexIn("^表达式$")。
PatternSyntax(模式语法)格式QRegExp::Wildcard与QRegExp::RegExp有些区别。通配符只有c、?、*、[...]。"c"就是代表本身意义,两者相同。Wildcard的"?"和RegExp的"."相同。Wildcard的"*"和RegExp的".*"相同。Wildcard的"[...]"中基本没有特殊意义的字符,就是代表其本身意义,而RegExp的"[...]"字符及其集缩写和("^"、"-")可以代表其特殊意义。
断言只用作判断用而不会匹配任何字符,如:\\bOK\\b,匹配字符串i am OK 会得到OK。字符串中不需要有\b。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息