正则表达式总结

来源:互联网 发布:成都办公软件电脑培训 编辑:程序博客网 时间:2024/06/07 14:18

说起正则表达式,很早就想要去研究一下,项目开发中一直用到,一直是百度一下解决问题,其实,今天细看了一下,没有想象中的复杂,特别的简单,动手实践一下,很快能够实现想要的表达式。

下面就总结一下常用的内容:

一般会用到Pattern和Macher这两个类,Pattern表示匹配的模式,Macher表示匹配器

常用的符号:

^ 用在[]外面表示第一位字符,在里面表示取反,比如[^0-9]表示非数字

. 表示任意一个字符

[] 表示表达式开始 [a-z]表示匹配所有小写字母

$ 表示结尾标志

+ 表示一个或多个

? 表示零个或一个

* 表示零个或多个

() 表示分组

{} 表示限定字符个数 {n,} 表示>=n

\d 表示数字

\b 表示单词边界

\w 表示匹配单词,同[0-9a-zA-Z_]

\s 表示匹配空白字符,同[\n\t\r\f\v]

\D 表示非数字

\ 转义字符

注意点:java中的字符串内容如果包含\,如果只是表示反斜杠 则需要前面加一个\进行解析,如果前面不加\,则默认\后面跟的字符为特殊字符等与\一起组成特殊含义。

上面总结的一些特殊字符,如果想要表示字符本身的含义则需要在前面添加转义字符\,还有一点最重要的地方是斜杠出现在正则表达式中时,如果表示的是转义字符,则只需要在前面添加\,如果表示的是单纯反斜杠,则需要在前面添加三个斜杠。为什么是这样呢?正则表达式中的反斜杠是先经过字符串解析然后再经过正则表达式引擎解析两层。举个例子,字符串“\”需要通过正则表达式“\\\\”来匹配才是正确的。前面两个反斜杠和后面两个反斜杠先经过字符串解析得到\\,然后通过正则表达式解析成\。总之,放在正则表达式里面需要经过两次转换。第一次转换含义是字符串意义上的解析,解析后还是转义字符,第二次解析是正则表达式层面,解析后变成本身的反斜杠。

一些特殊举例:

匹配邮箱:[\\w[.-]]+@[\\w[.-]]+\\.[\\w[.-]]+


自己test的小例子:

System.out.println("192.168.0.1".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
System.out.println("192.168.0.1".matches("[0-9]{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
System.out.println("".matches("a*"));
System.out.println("ab".matches("a?"));
System.out.println("a".matches("a+"));
System.out.println("a".matches("[abc]"));
System.out.println("a".matches("[^abc]"));
System.out.println("a".matches("[abc]|[ABC]"));
System.out.println("a".matches("[abcABC]"));
System.out.println(" ".matches("\\S"));
System.out.println("\\".matches("\\\\"));
System.out.println("[".matches("\\["));
System.out.println("i love you".matches(".*ou$"));
System.out.println(" \n".matches("^[\\s&&[^\\n]]*\\n$"));
//System.out.println(" \n".matches("^[\\s&&[^\\n]]*\\n$"));
//String str = "^\\w*@[0-9a-zA-Z]*\\.[0-9a-zA-Z]*";
System.out.println("ltm_zstu@163.com".matches("^\\w*@[0-9a-zA-Z]*\\.[0-9a-zA-Z]*"));
System.out.println("ltm_zstu@163.com.cn".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w[.-]]+"));


一般使用的匹配方式有两种:一种是String.maches(reg);

另外一种是:Pattern.Compile(reg).mather(string).find(); 如果需要显示匹配的字符串,直接调用Matcher.group()方法

0 0
原创粉丝点击