java正则表达式

来源:互联网 发布:asynchttp post json 编辑:程序博客网 时间:2024/05/01 15:19

java.util.regex包包含三个类:

  • Pattern类:
    Pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象;你必须首先调用公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
  • Matcher类:
    Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher 方法来活得一个Matcher对象。
  • PatternSyntaxException:
    PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

实例:

import java.util.regex.*;public class test_1 {    public static void main(String[] args) {        // TODO Auto-generated method stub        String content = "I am noob" + "from runoob.com.";        String pattern = ".*runoob.*";        boolean isMatch = Pattern.matches(pattern, content);        System.out.println("字符串中是否包含了'runoob'子字符串?"+isMatch);    }}

注意: 尝试将整个区域与模式匹配,当且仅当整个区域序列匹配此匹配器的模式时才返回true)
捕获组:
捕获组是把多个字符当成一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。
捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的分组:

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

可以通过调用Matcher对象的groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个表示matcher对象当前有多少个捕获组。
还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在groupCount 的返回值中。
实例:

import java.util.regex.Matcher;import java.util.regex.Pattern;public class test_1 {    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");        }    }}

运行结果:
这里写图片描述
注意: “*”号代表字符可以不出现,也可以出现一次或多次;”?”号代表前面的字符最多只可以出现一次;”.*” 能匹配除了换行符的任意字符;compile 方法将给定的正则表达式编译到模式中;Matcher 方法创建匹配给定输入与此模式的匹配器,返回此模式的新匹配器;group 方法返回以前匹配操作期间由给定组捕获的输入子序列,捕获组是从1开始从左到右的索引。组零表示整个模式,因此m.group(0)等效于m.group())
(1)this is text ——this is text
(2)this\s+is\s+text——this is text
“\s+”匹配多个空白符(\S则是任意不是空白符的字符)
(3)^\d+(.\d+)?——“5”,“1.5”或“2.21”
“^”定义以什么开始;”\d+”匹配多个数字(\D匹配一个非数字字符);”?”设置括号内选项可选;”.”匹配“.”(ps:”.”也是正则表达式,匹配任何一个字符:如“a”或“1”)

Match 类个别方法实例:

  1. startend 方法
import java.util.regex.Matcher;import java.util.regex.Pattern;public class test_1 {    private static final String REGEX="\\bcat\\b";    private static final String INPUT="cat cat cat cattie cat";    public static void main(String[] args) {        Pattern p=Pattern.compile(REGEX);        Matcher m=p.matcher(INPUT);        int count=0;        while(m.find())        {            count++;            System.out.println("Match number "+count);            System.out.println("start() :"+m.start());            System.out.println("end(): "+m.end());        }    }}

运行结果:
这里写图片描述
2. matcheslookingAt 方法

这里写代码片
  1. replaceFirstreplaceAll 方法
这里写代码片
  1. appendReplacementappendTail 方法
这里写代码片
0 0
原创粉丝点击