很多人都知道正则表达式,知道它强大的功能.有些人会写,却不知道怎么用;甚至有些人连正则表达式都还不会写.只要你曾经学会了一门语言中的正则表达式的使用,那么相信Java中的正则表达式也不难,其他语言用法也不离其终.下面我一一给大家讲解.
正则表达式和Java语法没有关系,它是JDK1.4版本引入的内容,Java中对正则表达式的操作被封装在几个类中.有java.util.regex.Pattern,java.util.regex.Matcher.
正则表达市的介绍:
1.可以使用字符作为一个通配符来代替除换行符(/n)之外的任意一个字符,例如: .at可以与"cat","sat","mat"等匹配.通常,这种通配符用于操作系统中文件名匹配.
2.[a-z]at,任何含在[]中的内容都是一个字符,只匹配一个字符.
如:[a-zA-Z]代表所有大小写字母.
3.[^a-z].匹配任何不属于a-z中的字符.
4.[a-z&&[hij]].匹配hij任何一个(交集)
5./s.匹配空字符(空格,tab,/n,换页,回车)
6./S.匹配非空字符(和[^/s]一样)
7./d.匹配数字,相当于[0-9]
8./D.匹配非数字,相当于[^0-9],匹配中文,空格,换行符
9./w.匹配词字符,相当于[a-zA-Z0-9],不包含中文,不能代表空格,换行符
10./W.匹配非词字符,相当于[^/w],匹配一个中文字
逻辑运算符:
|:管道符.如:x|y表示x或y
():捕获组.(abc)|(xyz)表示abc或xyz
边界匹配符:
^:从头匹配
$:从尾匹配
/b:词界.
/B.非词界
量词:
量词描述一个模式吸收输入文本的方式.
*:前面字符或组匹配0或多个
+:前面字符或组匹配1或多个
?:前面字符或组匹配0或1个
{n}:前面字符或组的数量为n个
{n,}:前面字符或组的数量至少n个
{n,m}:前面字符或组数量至少n个,最多m个
Java中正则表达式匹配过程:
Pattern 设定正则表达式
java.util.regex
Matcher 利用Pattern对象所包含的正则表达式来作字符匹配工作
public static Pattern compile(String regex)
public static Pattern compile(String regex, int flags)
flags为匹配模式:
CASE_INSENSITIVE(?i):不区分大小写模式.
DOTALL(?s):参数是让正则表达式"."去匹配任何的字符,包括换行符号(默认情况下,不能匹配换行符).
MULTILINE(?m):在多行模式下,"^"和"$"分别匹配一行的开始和结束."^"还匹配输入字符串的开头,而"$"还匹配输入字符串的结尾
UNIX_LINES(?d):多行模式下匹配".","^","$"时只识别行结束符"/n"
UNICODE_CASE(?u):当指定这个标记,并且开启了CASE_INSENSITIVE时,大小写不敏感的匹配将按照与unicode标准相一致的方式进行.
我们可以在Pattern中同时应用多种模式,他们中间用"|"或"+"类分隔.
public Matcher matcher(CharSequence input)根据参数来创建一个Matcher类对象.input:要进行匹配的字符串.
publc static boolean matches(String regex,CharSequence input)查看第二个参数给出的字符串是否匹配第一个参数的正则表达式.
public String[] split(CharSequence input)根据编译进入Pattern对象的正则表达式将参数给出的字符串进行拆分,拆分后的每一个部分都放在返回的数组中.
public String[] split(CharSequence input, int limit)根据编译进入Pattern对象的正则表达式将参数给出的字符串进行拆分,拆分后的每一部分放在返回的数组中.limit是用来控制Pattern模式应用到第二个参数的次数(即正则表达式在字符串中引用limit次)
如:String regex = "http://|//.";
Pattern p = Pattern.compile(regex);
String[] ret = p.split("http://www.baidu.com");
for(int i = 0; i < ret.length; i++) {
...
}