现在的位置: 首页 > 综合 > 正文

Java中的正则表达式(Java Regex)

2014年03月03日 ⁄ 综合 ⁄ 共 1892字 ⁄ 字号 评论关闭

很多人都知道正则表达式,知道它强大的功能.有些人会写,却不知道怎么用;甚至有些人连正则表达式都还不会写.只要你曾经学会了一门语言中的正则表达式的使用,那么相信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++) {

   ...

}

 

抱歉!评论已关闭.