正则表达式:
正则表达式就是在一个文本中匹配子字符串的一种模式(pattern),它可以简写为regexp。一个regexp主要应用在以下几个方面:
- 验证。regexp可以测试一个子字符串是否符合一些规范。
- 搜索。regexp提供了比简单字符串匹配更强大的模式匹配。
- 查找和替换。regexp可以使用一个不同的字符串替换所有匹配的子字符串。
- 字符串分割。regexp可以识别在哪里进行字符串分割。
Regexps由表达式、量词和断言组成。
正则表达式中的字符和字符集缩写
元素 |
含义 |
c |
一个字符代表它本身,除非这个字符有特殊的regexp含义。 |
\c |
跟在反斜杠后面的字符匹配字符本身,但是本表中下面指定的这些字符除外。 |
\a |
匹配ASCII的振铃(BEL,0x07) |
\f |
匹配ASCII的换页(FF,0x0C) |
\n |
匹配ASCII的换行(LF,0x0A) |
\r |
匹配ASCII的回车(CR,0x0D) |
\t |
匹配ASCII的水平制表符(HT,0x09) |
\v |
匹配ASCII的垂直制表符(VT,0x0B) |
\xhhhh |
匹配Unicode字符对应的十六进制数hhhh(0x0000~0xFFFF之间) |
\0ooo |
匹配八进制ASCII/Latin1字符ooo(在0~377之间) |
.(点) |
匹配任意字符(包括新航) |
\d |
匹配一个数字 |
\D |
匹配一个非数字 |
\s |
匹配额一个空白字符,包括”\t”、”\n”、”\v”、”\f”、”\r”和”” |
\S |
匹配一个非空白字符 |
\w |
匹配一个单词字符,包括任意一个字母或数字或下划线,即A~Z,a~z,0~9,中任意一个 |
\W |
匹配一个非单词字符 |
\n |
第n个反向引用。例如、\1、\2等 |
正则表达式中的量词
量词 |
含义 |
E? |
匹配0次或者1次,表明E是可选的,E?等价于E{0,1} |
E+ |
匹配1次或者多次,E+等价于E{1,} |
E* |
匹配0次或者多次,等价于E{0,} |
E{n} |
匹配n次,等价于E{n,n} |
E{n,} |
匹配至少n次 |
E{,m} |
匹配之多m次,等价于E{0,m} |
E{n,m} |
匹配之多n次,至多m次 |
正则表达式中的断言
断言 |
含义 |
^ |
标志着字符串的开始。如果要匹配”^”就要使用”\\” |
$ |
标志着字符串的结尾。如果要匹配”$”就要使用”\\$” |
\b |
一个单词的边界 |
\B |
一个非单词的边界,当”\b”为false,它为true |
(?=E) |
表达式后面经跟着E才匹配。 |
?!E |
表达式后面没有经跟着E才匹配。 |
通配符
字符 |
含义 |
c |
任意字符,表示字符本身 |
? |
匹配任意一个字符,类似于regexp中的”.” |
* |
匹配0个或者多个任意的字符,类似于regexp中的”. *” |
[...] |
在方括号中的字符集,与regexp中的类似 |
正则表达式语法
常量 |
描述 |
QRegExp::ReExp |
类似于Perl的模式匹配语法,这个是默认语法 |
QRegExp::ReExp2 |
类似于RegExp,不过时一种贪婪匹配语法 |
QRegExp::Wildcard |
一种简单的模式匹配语法 |
QRegExp::WildcardUnix |
与Widcard类似,但是使用Unix shell的行为 |
QRegExp::FixedString |
使用字符原意,不使用任何的转义字符 |
QRegExp::W3CXmlSchema11 |
在W3C XML Schenma 1.1规范中定义的一种正则表达式 |
文本捕获:
在regexp中使用括号可以使一些元素组合在一起,这样既可以对它们进行量化,也可以捕获它们。
新的QRegularExpression类:
在QRegularExpression中,一个正则表达式由俩部分构成:
- 一个模式字符串;
- 一组模式选项,模式选项用来更改字符串的含义;
模式选项
常量 |
描述 |
QRegularExpression::NoPatternOption |
没有设置模式选项 |
QRegularExpression::CaseInsensitiveOption
|
匹配目标字符串时,不区分大小写 |
QRegularExpression::DotMatchesEverythingOption
|
“.”匹配任意字符,包括换行符 |
QRegularExpression::MultilineOption
|
“”匹配字符串的开始和新航的开始,”$”匹配任意行的结尾 |
QRegularExpression::ExtendedPatternSyntaxOption
|
忽略所有空白,”#”后面的内容作为注释(可用换行符结束注释),用于提高可读性 |
QRegularExpression::InvertedGreedinessOption
|
反转量词的贪婪 |
QRegularExpression::DontCaptureOption
|
本命名捕获组不捕获子字符串、命名捕获组正常执行 |
QRegularExpression::UseUnicodePropertiesOption
|
\w、\d等字符类不再只匹配ASCII字符,而是匹配相应Unicode属性的任意字符 |
QRegularExpression::OptimizeOnFirstUsageOption
|
正则表达式在第一次使用时被优化,而不再是用几次之后才优化 |
QRegularExpression::DontAutomaticallyOptimizeOption
|
正则表达式默认在使用一定次数后会自动优化,使用该选项可以防止此类优化,这样就可以避免CPU和内存使用率出现不可预测的峰值 |