posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

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

Posted on 2008-05-04 09:59 G_G 阅读(2219) 评论(3)  编辑  收藏 所属分类: javaGeneral
这就不介绍了 代码上:
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() ) ;
    }
    
    
}




评论

# re: java regex 正则部分高级特性使用  回复  更多评论   

2008-05-04 10:17 by lvq810
不错 学习

# re: java regex 正则部分高级特性使用  回复  更多评论   

2008-05-04 11:50 by Norman
这些特性都还没有用过,多谢!

# re: java regex 正则部分高级特性使用  回复  更多评论   

2008-08-11 18:21 by G_G
匹配多行

public class Main {
public static void main(String[] args) {
String str = "<html>\r\n" +
"<body>\n" +
"<h1>title</h1>\r\n" +
"<h2>title2</h2>\r\n" +
"</body>\r\n" +
"</html>\n";
Pattern pattern = Pattern.compile("<body>[\\S\\s]*?</body>");
Matcher matcher = pattern.matcher(str);
while( matcher.find()){
System.out.println("______________");
System.out.println( matcher.group() );
}

}
}


结果:
______________
<body>
<h1>title</h1>
<h2>title2</h2>
</body>

http://www.codepub.com/info/2007/02/info-11598-6.html参考

只有注册用户登录后才能发表评论。


网站导航: