正则表达式,又称正规表达式,常规表达式,是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串,在很多文本编辑器中,正则表达式通常被用来检索.替换那些符合某个模式的文本.
正则表达式的语法可以自行搜索,通常分为一下几个方面:
1>字符
可以使用普通字符匹配,例"a"
使用预定义字符表示给定范围中的某个字符,"\d"表示匹配0~9中的任意一个数字字符.
使用 [ ] 给出自定义的范围,[a-z0-9]表示匹配a~z或数字0~9的某一个字符.
2>量词
有时候需要指定某个字符或组可以出现的次数,这时就要使用量词
"*" 表示指定的字符或组可以出现任意的次数(包括不出现)
"+" 表示指定的字符或组至少要出现一次
"?" 表示指定的字符或组最多出现一次,或者根本就没有.
"{n}", "{m,n}", "{n,}" 表示指定的字符或组必须出现n次,可以出现m~n次,最少出现n次,例"c{3}a{2-3}"表示由三个c开头后面跟2个或3个a.
3>边界符
进行匹配时,边界符不会匹配任何字符,只代表边界. 不可以将边界符理解为不可见字符,不可见字符是有内容的只是不可见而已;边界符不对任何字符匹配,只代表某个临界点
" ^ " 与" $ "分别表示的是字符串开始和结束的位置,一般用来匹配整个字符串. 例"^a*$"表示任意个a组成的字符串
" \b "表示的是单词的边缘,在要求匹配的内容是整个单词而不是单词的一部分时,\b就派上用场了
4>匹配次数的贪婪与非贪婪
贪婪模式下进行匹配时,将按照最大限度的可能进行匹配.
非贪婪模式是在匹配时按照最小限度的可能进行匹配
对abbbabbba进行匹配时, " a[\w]+a"匹配时会按照贪婪模式进行匹配,结果为;abbbabbba " a[\w]+?a"则会按照非贪婪模式进行匹配,结果为:abbba
5>分组以及分组引用
( ) 和 " \n "可以进行分组
Pattern与Matcher类:
Pattern类的对象用来表示通过编译的正则表达式,利用该类对象可以与任意字符串进行模式匹配( Pattern类的构造器是private的,不能通过调用构造器创建对象,需要调用Pattern类提供的静态工厂方法获得对象 pattern = Pattern.compile("(ab)+",Pattern.CASE_INSENSITIVE+Pattern.UNICODE_CASE); Pattern中有许多标志常量,多个标志常量可用+进行连接)
Matcher类,该类对象表示将要进行模式匹配的字符串或字符序列,同样,Matcher类对象夜不能通过调用构造器获得,需要通过Pattern对象中的matcher方法得到.有了Matcher对象可以调用相关方法进行匹配和替换.