【Java正则表达式】理解和开发中常用

来源:互联网 发布:java log4j打印ibatis 编辑:程序博客网 时间:2024/06/13 05:21

正则表达式定义了字符串的模式。可以用来搜索、编辑或处理文本。并不仅限于某一种语言,但是在每种语言中有细微的差别。

正则表达式java.util.regex 包主要包括以下三个类:

  • Pattern 类:

    pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

  • Matcher 类:

    Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

  • PatternSyntaxException:

    PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

捕获组

捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。

例如,正则表达式 (dog) 创建了单一分组,组里包含"d","o",和"g"。

捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组。

还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在 groupCount 的返回值中。

实例:

public class RegexMatches {    public static void main( String args[] ){        // 按指定模式在字符串查找        String line = "This order was placed for QT3000! OK?";        String pattern = "(\\D*)(\\d+)(.*)";        // 创建 Pattern 对象        Pattern r = Pattern.compile(pattern);        // 现在创建 matcher 对象        Matcher m = r.matcher(line);        if (m.find( )) {            System.out.println("Found value: " + m.group(0) );            System.out.println("Found value: " + m.group(1) );            System.out.println("Found value: " + m.group(2) );            System.out.println("Found value: " + m.group(3) );        } else {            System.out.println("NO MATCH");        }    }}
结果:
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000
Found value: ! OK?

public static void main(String[] args) {    String pattern = "^\\/user\\/[a-zA-Z0-9]+\\/self_password$";    Pattern p = Pattern.compile(pattern);    System.out.print(p.matcher("/user/iiii44/self_password").matches());}


正则表达式语法:





常用正则表达式:

验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0) ^\d+$
验证非正整数(负整数 + 0) ^((-\d+)|(0+))$
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:^[a-za-z]+$
验证由26个大写英文字母组成的字符串:^[a-z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[a-za-z0-9]+$
验证由数字和26个英文字母9位组成的字符串:^[0-9a-zA-Z]{9}$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[a-za-z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-za-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证身份证号(15位或18位数字):^\d{15}|\d{18}$
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数 : ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0): ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数: ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数: ^(-?\d+)(\.\d+)?
匹配所有键盘上可见的非字母和数字的符号:((?=[\x21-\x7e]+)[^A-Za-z0-9])
匹配所有键盘上所有可见的非字母和数字的符号:((?=[\x21-\x7e]+)[^A-Za-z0-9])/g
匹配包括换行符在内的任意字符: ([\s\S]*) 同时,也可以用 “([\d\D]*)”、“([\w\W]*)” 来表示;([\s\S]*?) 加上问号 表示最短匹配
匹配长度为1-20的任意字符:
public class RegexDemo {    public static void main(String[] args) {        String pattern = "([\\s\\S]){1,20}";        Pattern p = Pattern.compile(pattern);        System.out.print(p.matcher("12345678908-哈哈rrrurr!").matches());    }}

Matcher 类的方法

索引方法提供了有用的索引值,精确表明输入字符串中在哪能找到匹配:


研究方法用来检查输入字符串并返回一个布尔值,表示是否找到该模式:


替换方法是替换输入字符串里文本的方法:


PatternSyntaxException 类的方法

PatternSyntaxException 是一个非强制异常类,它指示一个正则表达式模式中的语法错误。

PatternSyntaxException 类提供了下面的方法来帮助我们查看发生了什么错误。



在线测试正则表达式工具:
http://tool.oschina.net/regex/
http://www.regextester.com/
离线工具:
Ultrapico Expresso是工作中经常使用的一个非常强大的正则表达式构建、测试以及代码生成工具。

以上内容参考:http://www.runoob.com/java/java-regular-expressions.html

更多学习参考:http://www.jb51.net/tools/zhengze.html

原创粉丝点击