一个正则表达式,是一个字符,或者是一个字符集的缩写,或者是用方括号抱起来的一些字符的集合,或用圆括号括起来的表达式。
[A-Z] 匹配A-Z之间的字符
x{1,1} 只匹配一次x
x{1,5} 匹配至少1次,至多5次x
[0-9]{1, 1} 只匹配一个数字
[0-9]{1, 2} 匹配0-99
如果需要匹配整个字符串,就需要借助^和$:
当^在正则表达式的开头时,表示正则表达式从整个字符串的开头进行匹配
当$在正则表达式的结尾时,表示正则表达式匹配到整个字符串的截尾
1{1,2}$ 匹配整个字符串,且只有0-99的数字字符
[0-9] 等同于 \d
x{1, 1} 等同于 x
2{1, 2}$ 等同于 ^\d{1, 2}$ 等同于 ^\d\d{0, 1}$ 等同于 ^\d\d?$
? 表示{0, 1},发生0次或一次
|表示或
mail|letter|correspondence 匹配mail或letter或correspondence,但不考虑字符串的边界,即email也是符合条件的
\b(mail|letter|correspondence)\b 匹配mail或letter或correspondence,并且考虑字符串的边界,email将不符合条件
\xhhhh:匹配Unicode字符,表示16进制的0x0000到0xFFFF
. :匹配任意字符(包括newline)
\d:匹配一个数字(QChar::isDigit()).
\D:匹配一个非数字字符
\s:匹配一个空格字符(QChar::isSpace()).
\S:匹配一个非空格字符
\w:匹配一个单词字符 (QChar::isLetterOrNumber(), QChar::isMark(), or ‘_’).
\W:匹配非单词字符
\n:第那个发现引用,例如\1,\2等
注意: C++编译器会对字符串中的反斜杠进行转义,如果正则表达式中包含\,那么请输入2次。如果在正则表达式中,要匹配字符串中的\,请输入4次反斜杠,例如\\
当^出现中括号中,表示除之外
[abc]:匹配a或b或c
[^abc]:匹配除了a、b、c以外的任意字符
当-出现在中括号中,表示一个字符序列
[W-Z]:表示W、X、Y、Z
使用预定义的字符集缩写比使用跨平台和语言的字符范围更便于移植。例如,[0-9]匹配西方字母表中的数字,而\d匹配任何字母表中的数字。
数量(计数)
E?:字符E出现0次或1次
E+:字符E出现至少1次,等同于E{1,}
E*:字符E出现0次或更多次,等同于E{0,},注意:使用\s+KaTeX parse error: Undefined control sequence: \s at position 14: 匹配空格截尾的字符串,而非\̲s̲*
E{n}:字符E出现n次,等同于E{n,n}
E{n,}:字符E至少出现n次
E{,m}:字符E至多出现m次,等同于E{0,m}
E{n,m}:字符E至少出现n次,至多出现m次
捕获使用:()
不捕获使用:(?:开始,)结束
下面是一个捕获的实例:
// In the following example we match strings containing 'mail' or 'letter'
// or 'correspondence' but only match whole words i.e. not 'email'
QRegExp rx("\\b(mail|letter|correspondence)\\b");
rx.indexIn("I sent you an email"); // returns -1 (no match)
rx.indexIn("Please write the letter"); // returns 17