元字符
()
将小括号中的当作一个原子进行匹配,不管小括号中放的是什么。如(abc|e)ar可以匹配abcar和ear。
[]
匹配[]中的任意一个原子,如[41d]会匹配4,1,d三个字符。再如t[io]p会匹配tip和top两个字符串。
[^]与[]相反,表示不匹配[]中的任意一个原子。
^与$
匹配字符串的开头,如^s表示要匹配的字符串必然以s开关,否则不匹配;$类似,只不过它用于控制结尾。如
String regex = "^\\s[0-9]+$";
Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher("234");
返回的就是false,因为^要求匹配的字符串必须以不可见原子开头。如果将"234"换成"[空格]234"就会匹配成功。
|
用于匹配多个分支。如“q4|1”表示匹配"q4"或者"1"。
\
转义字符。跟java等语言中的转义一样。如t\\p匹配的是t\p而不是tp,也不是t\\p。常用的特定含义的转义字符:
其中\f表示分页符,\n表示换行符,\t表示制表符,\v表示垂直制表符,\r表示回车符。不可见原子(空格、换行等无可见内容的字符)的匹配。空格:直接输入了一个空格即可进行匹配。
\b:匹配一个单词边界。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'.
\B:匹配非单词边界。如
import re
s = "hellohu hu hui"
print re.sub(r"hu",'xx',s) # helloxx xx xxi
print re.sub(r"hu\b",'xx',s) # helloxx xx hui
print re.sub(r"\bhu\b",'xx',s) # hellohu xx hui
\bhu\b表示是一个单词hu,而不是某一个单词内部的两个字母。量词
{n,m}前一个原子(有可能是单个字符,也有可能是通过()括起来的字符串)出现次数为[n,m];{n}前一个原子出现次数为n;{n,}前一个字符出现次数大于等于n次;+表示前一个字符出现次数大于等于1次;*表示前一个字符出现的次数要大于等于0;?表示前一个字符出现0次或者1次。
例如(w+f){3,}匹配wfwfwf,但不会匹配wfff。
贪婪与非贪婪
贪婪表示尽可能匹配多的字符,而非贪婪就是尽可能匹配少的字符。如:正则表达式为ad+,去匹配字符串"addddd",如果结果是addddd则是贪婪的(尽可能多的去匹配d字符),如果结果是ad则是非贪婪的(只取满足条件的最小字符)。
Pattern
java中用来操作正则表达式的类。
CASE_INSENSITIVE:忽略整体大小写。如果想忽略某个字符的大小写,可以在该字符前加?i。如
(?i)abc 表示abc都忽略大小写
a(?i)bc 表示bc忽略大小写
a((?i)b)c 表示只有b忽略大小写
COMMENTS:忽略正则表达式中的空白。要注意:并不是忽略要进行匹配的字符串中的空白符,只是忽略正则表达式中的。