您的位置:首页 > 编程语言 > Java开发

java正则表达式的基本用法

2014-05-21 18:22 260 查看
正则表达式是开发过程中的一把利器,利用它可以很轻松的匹配,查找,修正很多字符串。以下以java环境下讲解。
java正则表达式主要设计Pattern,Mathcer,String这3个类的API

一、字符及字符串的表示法(有些是有许多表示法,但只以我的习惯为准)

字符类

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]] d、e 或 f(交集)

[a-z&&[^bc]] a 到 z,除了 b 和c:[ad-z](减去)

[a-z&&[^m-p]] a 到 z,而非 m 到p:[a-lq-z](减去)

***以上在java中使用时用双引号将它们括起来就可以了

预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9] (单个数字)

\D 非数字: [^0-9]

\s 空白字符:[ \t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w]

以上在java中使用时除了将它们用双引号括起来以为,还须加\转义,例如\d的实际用法是”\\d“

POSIX 字符类(仅 US-ASCII)
\p{Lower}小写字母字符:[a-z]
\p{Upper}大写字母字符:[A-Z]
\p{ASCII}所有 ASCII:[\x00-\x7F]
\p{Alpha}字母字符:[\p{Lower}\p{Upper}]
\p{Digit}十进制数字:[0-9]
\p{Alnum}字母数字字符:[\p{Alpha}\p{Digit}]
\p{Punct}标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph}可见字符:[\p{Alnum}\p{Punct}]
\p{Print}可打印字符:[\p{Graph}\x20]
\p{Blank}空格或制表符:[ \t]
\p{Cntrl}控制字符:[\x00-\x1F\x7F]
\p{XDigit}十六进制数字:[0-9a-fA-F]
\p{Space}空白字符:[ \t\n\x0B\f\r]
以上字符串要加双引号和反斜杠号

Greedy 数量词
X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n 次
X{n,}X,至少 n 次
X{n,m}X,至少 n 次,但是不超过
m 次
用法也是将它们用双引号括起来

Logical 运算符
XYX 后跟 Y
X|YX 或 Y
(X)X,作为捕获组
用法也是将它们用双引号括起来

注意:正则表达式则有在方法参数明确是以正则表达式为参考时才使用,否则如果方法参数是普通字符序列时是不起作用的。

二、相关的API
1、String类
String类的有些函数包含了正则表达式的概念以用法,但须注意的是有些函数的参数虽然是字符串型,但要具体分析,如果它只是普通字符串,那就按一般的处理,如果它是一个正则表达式则须注意。某些函数要求你的参数必须是正则表达式型的。

1-1、boolean contains(CharSequence s)

当且仅当此字符串包含指定的
char 值序列时,返回 true。
该函数的参数只是普通的字符串
Strings="abc.e",s.contains(".")为true
1-2、String replace(CharSequence target, CharSequencereplacement)

使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
该函数的参数也是普通字符串
因此 Strings="abc990",s.replace(“\\d”,"A")时,结果是不变的
1-3、String replaceAll(String regex, String replacement)

使用给定的replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
该函数的首个参数是正则表达式
因此Strings="abc990",s.replaceAll(“\\d”,"A")时,其返回值(不是s1本身)结果为"abcAAA".
1-4、String[] split(String regex)

根据给定正则表达式的匹配拆分此字符串。
1-5、boolean startsWith(String prefix)

测试此字符串是否以指定的前缀开始。
1-6、boolean endsWith(String suffix)

测试此字符串是否以指定的后缀结束。

注意 以上2个函数参数是普通字符串

2、Pattern类
获取其实例
2-1、static Pattern compile(String regex)

将给定的正则表达式编译到模式中。

2-2、String[] split(CharSequence input)

围绕此模式的匹配拆分给定输入序列。

2-3、Matcher matcher(CharSequence input)

创建匹配给定输入与此模式的匹配器。

2-4、static boolean matches(String regex, CharSequenceinput)

编译给定正则表达式并尝试将给定输入与其匹配。
例如Pattern.matches(“\\d”,"3")将返回true

3、Mathcer类
3-1、Pattern pattern()

返回由此匹配器解释的模式。
3-2、boolean matches()

尝试将整个区域与模式匹配。
完全匹配时才会为true

3-3、 Matcher usePattern(Pattern newPattern)

更改此 Matcher用于查找匹配项的 Pattern。
3-4、 boolean find()

尝试查找与该模式匹配的输入序列的下一个子序列。
使用以下形式将可以遍历所有的序列,从而进行其他操作
boolean find=matcher.find();

while(find

find=matcher.find();

}
3-5、Matcher appendReplacement(StringBuffer sb, Stringreplacement)

实现非终端添加和替换步骤。
此函数将当前查找到的匹配相用replacement代替,兵将replacement和之前的字符串存储在
sb中,例如输入序列是"abcDseD",正则表达式是"D",replacement是"A",第一次调用find方法后
然后执行此函数则sb的内容为"abcA".(sb的值初始化为调用默认构造函数生成)
3-6、StringBuffer appendTail(StringBuffer sb)

实现终端添加和替换步骤。
执行此函数将3-5中的sb与其后的字符串连起来,引用上面例子,如果在3-5函数后调用此函数则sb的结果为"abcAseD".

例子,将"abc03DW9"中的数字全部换为"A",可用以下代码得到
Pattern pattern=Pattern.compile(“\\d”);
Matcher matcher=pattern.matcher("abc03DW9");
boolean find;
StringBuffer sb=new StringBuffer();
while(find){
matcher.appendReplacement(sb,"A");
find=matcher.find();
}
matcher.appendTail(sb);
到此步已获结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: