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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- msql 正则表达式
- 正则表达式
- 插入排序