public static Pattern compile(String regex) {
return new Pattern(regex, 0);
public static Pattern compile(String regex, int flags) {
return new Pattern(regex, flags);
第一个参数是正则表达式,第二个参数是匹配模式(一个16进制的标识,Pattern
中定义的常量),对应上面的 修饰符
下面分别举例说明:
1:Pattern.CASE_INSENSITIVE
等同于修饰符 i
: 不区分大小写。
2:m 可以匹配多行字符,即字符串中包括换行也可以,如: 字符串 ”bacd\nabde\nabgh",匹配规则:/ab/ ,没有匹配字符串,规则:/ab/m 可以匹配到第二行,第三行其实也是相符的,但单加上m只匹配到第一条,在python中使用re.findall就匹配全部,这个参数在此函数中不起作用。
3:g 全局匹配,上面规则改成:/ab/mg 就会匹配所有符合条件的字符,无论多少行,上面例子可以匹配后两行,python无些参数,本身就是全局搜索。
4:s 可以匹配换行符。如: 字符串 ”bacd\nabde\nabgh",re.findall(‘cd.’,s),没有匹配字符串,改成:re.findall(‘cd.’,s,re.S),就可以匹配’cd\n’,也就是加了这个修正符,可以将\n视为一个换行符号,否则将视为普通字符。
5:X,忽略模式中空格,如: 字符串 ”bacd\nabde\nabgh",re.findall(’ c d’,s),没有匹配的字符串,改成:re.findall(’ c d’,s,re.X),就和’cd\n’中的cd匹配成功。
6:A 强制从头开始匹配。如: 字符串 ”bacdefg", /ac/gi能匹不个字符,因为不是ac开头的,python中的re.A参数表示的是ascii码,在python中本身就是从头搜索的,所以无些参数。
7:Z 强制结尾匹配,/ab/Z,只能匹配字符串“efgab",而不能匹配"abcdef"因为不是以ab结尾的,python中fqhx无此参数。
8:D 不可匹配结尾的换行符。/ef$/D不能匹配"abcdef\n",而只能匹配"abcdef",去除/D修正符,可以匹配两个字符串。
9:U 只匹配最近一个字符串,也就是第一次出现的,python中的re.search()本身就是搜索到第一次的,在python中re.U是指指定的目标串是Unicode字符串。