java正则表达式

来源:互联网 发布:斗牛快速算法 编辑:程序博客网 时间:2024/05/16 04:34
    正则表达式有多么强大,我就不去点评了,因为在你日渐接触的过程中就会发现它的伟大之处。    下面我就通过自己的一些理解来谈谈它的用法吧。    正则表达式在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<制表符>"\\?\\["//匹配?[
还有一些预定义字符,这里的用处非常的广,希望你们能背下来![预定义字符](http://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)”);

0 0