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

java正则表达式

2016-08-18 21:37 267 查看
正则表达式有多么强大,我就不去点评了,因为在你日渐接触的过程中就会发现它的伟大之处。
下面我就通过自己的一些理解来谈谈它的用法吧。
正则表达式在string中用的最多,其中最多的就是在split方法中把它分割成数组来保存,特别是在前端中的密码,用户名的使用中可以明显的把代码减少。
那么下面来谈谈正则表达式的格式吧。
String类里提供了如下的特殊方法:
》boolean matches(String regex):判断该字符是否匹配正则表达式。
》string replaceAll(String regex,String replacement):将该字符串替换成指定元素。
》String replaceFirst(String regex,String replacecment):将字符串第一个匹配regex的字串替换成replacement。
》String[] split(String regex):以regex作为分隔符,把该字符串分割成多个字串。
下面是正则表达式的合法字符:
x:字符x(x可带表任何合法字符)
\0mnn:八进制所代表的字符
\xhh:十六进制所代表的字符
\uhhhh:十六进制所代表的unicode字符
\t:制表符
\n:换行符
\r:回车符
\f:换页符
\a:报警(bell)符
\e:escape符
\cx:x对应的控制符,例如,\cM匹配Ctrl+M
***下面是一些特殊字符***
$:匹配一行的结尾。要匹配$本身就用\$
^:匹配一行的开头。
():标记子表达式的开始和结束的位置。
[]:用于确定中括号表达式的开始和结束的位置。
{}:用于标记前面的子表达式的出现的频度。
*:指定前面的子表达式可以出现零次或多次,贪婪模式。
+:指定前面的子表达式可以出现一次或多次,占用模式。
?:指定前面的子表达式可以出现零次或一次,勉强模式。
.:匹配除\n以外的所有的字符。
:用以转义下一个字符,或指定八进制,十六进制字符。
|:指定两项之中任选一项。


"\u0041\\\\"//匹配A\
"\u0061\t"//匹配a<制表符>
"\\?\\["//匹配?[


还有一些预定义字符,这里的用处非常的广,希望你们能背下来
![预定义字符](https://img-blog.csdn.net/20160817222644719)


c\\w\t //可以匹配cat,cbt,cct....等一系列字符串。
\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d //匹配如000-000-0000的形式的电话号码。


要想匹配一些预定义的字符,例如0-3,则可以用[0123]或者[0-3],
还有&&,非^,和平常的运用一样,要是匹配a-z&&A-Z则可以使用[a-zA-Z]。
边界匹配符(不是重点)
^:行的开头。
$:行的结尾
\b:单词的边界
\B:非单词的边界(大写的字母一般和小写的字母的含义是相反的意思)
\A:输入的开头
\G:前一个匹配的结尾
\Z:输入的结尾,仅用于最后的结束符
\z:输入的结尾
**下面介绍几个常用分模式**
Greedy(贪婪模式),Reluctant(勉强模式)以(?)表示,它只会匹配最少的字符。Possessive(占有模式)以(+)表示,只有java有,一般很少用。
贪婪:X?
勉强:X??
占有:X?+
关于贪婪和勉强模式的对比如下:


String str="hello,java!";
//贪婪模式
System.out.println(str.replaceFirst("\\w*","+"));
//勉强模式
System.out.println(str.replaceFirst("\\w*?","+"));


第一行会输出“+,java!”
第二行会输出“+hello,java!”
因为第一行是贪婪模式,会一直匹配数字,字母,下划线,所以在,之前的都匹配成功,所以就会输出上面的结果,而第二行,从第0个匹配,成功就不会匹配下面的,所以结果显而易见。
**使用正则表达式**
一旦定义了正则表达式,就可以使用Pattern和matcher来使用正则表达式。
例如下面的一个小例子:
//讲一个字符串编译成pattern对象\
Pattern p=Pattern.compile(a*b);
//使用pattern对象创建matcher对象
Matcher m=p.matcher("aaaaab");
boolean b=m.matches();//返回true;
上面定义的pattern对象可以重复使用,如果这个正则表达式只想使用一次,那么可以用下面的方法:
boolean b.Pattern.matches("a*b","aaaaab");//返回true;
matcher类提供了如下的方法:
》find():返回目标字符串中是否包含与pattern匹配的字串
》ground():返回上一次与pattern匹配的字串。
》start():返回上一次与pattern匹配的字串第一次出现的位置。
》end():返回结束位置加1;
》lookingAt():返回目标字符串前面部分是否与pattern匹配。
》matches():返回整个目标字符串与pattern是否匹配。
》reset():将现有的matcher对象应用于一个新的字符序列。
下面示范了怎么在字符串中找号码:
package 正则;


import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class FindGroup {

public static void main(String[] args){
String str="我想买一本兄弟,尽快联系我,13100000010"+"交个朋友吧,13600004463"+"收购手机:15590897128";
Matcher matcher=Pattern.compile("((13\\d)|(15\\d))\\d{8}").matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}

}


}

邮箱的格式(”\w{3,20}@\w+\.(com|org|gov|net|cn)”);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 正则表达式