java regex 正则部分高级特性使用

 

package unit;

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

import org.junit.Assert;
import org.junit.Test;

public class RegexUnit {


    @Test
    /**
     * <p>向前\向后查找</p>
     */
    public void unit9()throws Exception{
        String testStr = "http://www.google.com";
       
        /* 一般查找
         * .+(:) 查询出结果包含 :
         */
        Pattern pattern = Pattern.compile(".+(:)");       
        Matcher matcher =  pattern.matcher(testStr);
            Assert.assertTrue("错误: 查找出结果通过 .+(:) 此regex没有包含 : ",
                    matcher.find() && matcher.group().equals("http:") );
       
        /*  向前查找
         *  .+(?=:) 查询结果不包含 :
         */
        Pattern pattern2 = Pattern.compile(".+(?=:)");
        Matcher matcher2 = pattern2.matcher(testStr);
            Assert.assertTrue("错误: 查找出结果通过 .+(?=:) 此regex有包含 : ",
                    matcher2.find()&& matcher2.group().equals("http"));
        /* 向后查找
         * (?<=:).+
         */
        Pattern pattern3 = Pattern.compile("(?<=://).+");
        Matcher matcher3 = pattern3.matcher(testStr);
            Assert.assertTrue("错误:查找出结果包含 http:// 不向后查询",
                    matcher3.find()&& matcher3.group().equals("www.google.com") );
    }


    @Test
    /** 回朔应用
     *  查询回朔、回朔替换、回朔大小写替换
     */
    public void unit8()throws Exception{
        String testStr = "this is a block of of test,"+
                            " several words here are are " +
                            " repeated , and and they should not be. ";
       
        Pattern pattern = Pattern.compile("[ ]+(\\w+)[ ]+\\1");
        Matcher matcher = pattern.matcher(testStr);
        //查询结果 are are
        Assert.assertTrue("错误:regex 不匹配 ",
                matcher.find()&&matcher.group().split(" ").length>=2 );
       
        while( matcher.find() ){
            Assert.assertTrue("错误:regex 不匹配 ",
                    matcher.group().split(" ").length>=2 );
        }
       
       
        //替换
        String testStr2s = "313-555-1234";
        Pattern pattern2 = Pattern.compile("(\\d{3})(-)(\\d{3})(-)(\\d{4})");
        Matcher mtmp =  pattern2.matcher(testStr2s);
        Assert.assertTrue("错误:没有查替换",
                mtmp.find() &&
                    mtmp.replaceAll("($1) $3-$5").equals("(313) 555-1234") );
       
       
        /*大小写替换(java 不能成功)
         *  \E 结束 \L 或 \U转换
         *  \l  \L 把下一个字符(串)换为小写
         *  \ u  \U 把下一个字符(串)转换为大写
         *  此中 (.*?)懒散加载
         */
        String testStr3 = "tt:google:xx";
        Pattern pattern3 = Pattern.compile("(?<=:)(.*?)(?=:)");
        Matcher matcher2 = pattern3.matcher(testStr3);
        if( matcher2.find())
            System.out.println( matcher2.group() ) ;
    }
   
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值