Java的正则相关的Pattern和Matcher

2016-08-19  本文已影响1888人  榨菜哥wjj

Java的正则相关的Pattern和Matcher

此篇文章是记录我在学习Java正则表达式时候学到的和遇到的坑。

先来说说Matcher里面的三个方法(取的结果以group()方法为例子)


好了上测试代码:

package com.wjj.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* @author 作者 : 榨菜哥
* @version 创建时间:2016年8月18日 上午8:47:58
* 类说明:正则表达式的练习
*/
public class Regex {

    //find方法测试
    public static void find(String html) {
        String regex = "\\d\\d\\d";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(html);
        System.out.print("find():");
        if (matcher.find()) {
            System.out.println(matcher.group());
        }
        
    }
    //matches方法测试
    public static void matches(String html) {
        String regex = "^\\w\\d\\d\\d";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(html);
        System.out.print("matches():");
        if (matcher.matches()) {
            System.out.println(matcher.group());
        }
        
    }
    //lookingAt方法测试
    public static void lookingAt(String html) {
        String regex = "\\w\\d\\d";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(html);
        System.out.print("lookingAt():");
        if (matcher.lookingAt()) {
            System.out.println(matcher.group());
        }
        
    }
    
    public static void main(String[] args) {
        //find方法测试
        find("a123b");
        //matches方法测试
        matches("a123");
        //lookingAt方法测试
        lookingAt("a123b");
    }
}

输出结果:
    find():123
    matches():a123
    lookingAt():a12

小结:正则表达式本身并不难,平常使用的时候只要按照规则来写就好了。在学习中理解matches、find、和lookingAt三个方法花了我比较长的时间,一直不能理解完全匹配和部分匹配是什么意思,最后还是在stackoverflow上找到了想要的答案。

以上是个人学习的理解,有不对之处,希望给予指点。
(补充:正则表达式Pattern如果调用多次容易出问题,比如内存溢出,因为Pattern每执行一次就编译一次正则表达式,因此建议将需要的正则表达式进行预编译。)
正则表达式学习教程:http://deerchao.net/tutorials/regex/regex.htm,文中作者写得挺详细的,并且通俗易懂。


福利:
小伙伴们,给大家发红包喽!人人可领,领完就能用。祝大家领取的红包金额大大大!#吱口令#长按复制此消息,打开支付宝就能领取!arPyVF21FW

上一篇 下一篇

猜你喜欢

热点阅读