注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

liu的博客

 
 
 

日志

 
 

java正则的几个例子  

2010-03-25 17:43:16|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

view plaincopy to clipboardprint?
Pattern Pattern.compile(String regex, int flag); 
Pattern Pattern.compile(String regex, int flag); 

flag的取值范围如下:
Pattern.CANON_EQ     当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式"a\?"会匹配"?"。默认情况下,不考虑"规 范相等性(canonical equivalence)"。

能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹 配,只要将UNICODE_CASE与这个标志合起来就行了。


Pattern.CASE_INSENSITIVE(?i)     默认情况下,大小写不明感的匹配只适用于US-ASCII字符集。这个标志

Pattern.COMMENTS(?x)     在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的"\\s",而是指表达式里的空格,tab,回车之类)。注释从#开始,一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。


Pattern.DOTALL(?s)     在这种模式下,表达式'.'可以匹配任意字符,包括表示一行的结束符。默认情况

下,表达式'.'不匹配行的结束符。

配字符串的结束。默认情况下,这两个表达式仅仅匹配字符串的开始和结束。


Pattern.MULTILINE(?m)     在这种模式下,'^'和'$'分别匹配一行的开始和结束。此外,'^'仍然匹配字符串的开始,'$'也匹

感的匹配。默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集。


Pattern.UNICODE_CASE(?u)     在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明

行匹配。


Pattern.UNIX_LINES(?d)     在这个模式下,只有'\n'才被认作一行的中止,并且与'.','^',以及'$'进

◆比如,在字符串包含验证时


view plaincopy to clipboardprint?
//查找以Java开头,任意结尾的字符串  
Pattern pattern = Pattern.compile("^Java.*");  
  Matcher matcher = pattern.matcher("Java不是人");  
  boolean b= matcher.matches();  
  //当条件满足时,将返回true,否则返回false  
  System.out.println(b); 
//查找以Java开头,任意结尾的字符串
Pattern pattern = Pattern.compile("^Java.*");
  Matcher matcher = pattern.matcher("Java不是人");
  boolean b= matcher.matches();
  //当条件满足时,将返回true,否则返回false
  System.out.println(b);

◆以多条件分割字符串时


view plaincopy to clipboardprint?
Pattern pattern = Pattern.compile("[, |]+");  
String[] strs = pattern.split("Java Hello World  Java,Hello,,World|Sun");  
for (int i=0;i<strs.length;i++) {  
    System.out.println(strs[i]);  
}  
Pattern pattern = Pattern.compile("[, |]+");
String[] strs = pattern.split("Java Hello World  Java,Hello,,World|Sun");
for (int i=0;i<strs.length;i++) {
    System.out.println(strs[i]);

 

◆文字替换(首次出现字符)

view plaincopy to clipboardprint?
Pattern pattern = Pattern.compile("正则表达式");  
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");  
//替换第一个符合正则的数据  
System.out.println(matcher.replaceFirst("Java")); 
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//替换第一个符合正则的数据
System.out.println(matcher.replaceFirst("Java"));

◆文字替换(全部)
view plaincopy to clipboardprint?
Pattern pattern = Pattern.compile("正则表达式");  
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");  
//替换第一个符合正则的数据  
System.out.println(matcher.replaceAll("Java")); 
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//替换第一个符合正则的数据
System.out.println(matcher.replaceAll("Java"));

◆文字替换(置换字符)

view plaincopy to clipboardprint?
Pattern pattern = Pattern.compile("正则表达式");  
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World ");  
StringBuffer sbr = new StringBuffer();  
while (matcher.find()) {  
    matcher.appendReplacement(sbr, "Java");  
}  
matcher.appendTail(sbr);  
System.out.println(sbr.toString()); 
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World ");
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sbr, "Java");
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());

◆验证是否为邮箱地址

view plaincopy to clipboardprint?
String str="ceponline@yahoo.com.cn";  
Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);  
Matcher matcher = pattern.matcher(str);  
System.out.println(matcher.matches()); 
String str="ceponline@yahoo.com.cn";
Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());

◆去除html标记

 view plaincopy to clipboardprint?
Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);  
Matcher matcher = pattern.matcher("<a href="\" mce_href="\""index.html\">主页</a>");  
String string = matcher.replaceAll("");  
System.out.println(string); 
Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
Matcher matcher = pattern.matcher("<a href="\" mce_href="\""index.html\">主页</a>");
String string = matcher.replaceAll("");
System.out.println(string);

◆查找html中对应条件字符串

view plaincopy to clipboardprint?
Pattern pattern = Pattern.compile("href=\"(.+?)\"");  
Matcher matcher = pattern.matcher("<a href="\" mce_href="\""index.html\">主页</a>");  
if(matcher.find())  
  System.out.println(matcher.group(1));  

Pattern pattern = Pattern.compile("href=\"(.+?)\"");
Matcher matcher = pattern.matcher("<a href="\" mce_href="\""index.html\">主页</a>");
if(matcher.find())
  System.out.println(matcher.group(1));
}

◆截取http://地址

view plaincopy to clipboardprint?
//截取url  
Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");  
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");  
StringBuffer buffer = new StringBuffer();  
while(matcher.find()){                
    buffer.append(matcher.group());          
    buffer.append("\r\n");                
System.out.println(buffer.toString());  

//截取url
Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){             
    buffer.append(matcher.group());       
    buffer.append("\r\n");             
System.out.println(buffer.toString());
}
 

◆替换指定{}中文字
view plaincopy to clipboardprint?
String str = "Java目前的发展史是由{0}年-{1}年";  
String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};  
System.out.println(replace(str,object));  
 
public static String replace(final String sourceString,Object[] object) {  
            String temp=sourceString;      
            for(int i=0;i<object.length;i++){  
                      String[] result=(String[])object[i];  
               Pattern    pattern = Pattern.compile(result[0]);  
               Matcher matcher = pattern.matcher(temp);  
               temp=matcher.replaceAll(result[1]);  
            }  
            return temp;  

String str = "Java目前的发展史是由{0}年-{1}年";
String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};
System.out.println(replace(str,object));

public static String replace(final String sourceString,Object[] object) {
            String temp=sourceString;   
            for(int i=0;i<object.length;i++){
                      String[] result=(String[])object[i];
               Pattern    pattern = Pattern.compile(result[0]);
               Matcher matcher = pattern.matcher(temp);
               temp=matcher.replaceAll(result[1]);
            }
            return temp;
}
 

◆以正则条件查询指定目录下文件

 

 view plaincopy to clipboardprint?
//用于缓存文件列表  
        private ArrayList files = new ArrayList();  
        //用于承载文件路径  
        private String _path;  
        //用于承载未合并的正则公式  
        private String _regexp;  
          
        class MyFileFilter implements FileFilter {  
 
              /** 
               * 匹配文件名称 
               */ 
              public boolean accept(File file) {  
                try {  
                  Pattern pattern = Pattern.compile(_regexp);  
                  Matcher match = pattern.matcher(file.getName());                  
                  return match.matches();  
                } catch (Exception e) {  
                  return true;  
                }  
              }  
            }  
          
        /** 
         * 解析输入流 
         * @param inputs 
         */ 
        FilesAnalyze (String path,String regexp){  
            getFileName(path,regexp);  
        }  
          
        /** 
         * 分析文件名并加入files 
         * @param input 
         */ 
        private void getFileName(String path,String regexp) {  
            //目录  
              _path=path;  
              _regexp=regexp;  
              File directory = new File(_path);  
              File[] filesFile = directory.listFiles(new MyFileFilter());  
              if (filesFile == null) return;  
              for (int j = 0; j < filesFile.length; j++) {  
                files.add(filesFile[j]);  
              }  
              return;  
            }  
      
        /** 
         * 显示输出信息 
         * @param out 
         */ 
        public void print (PrintStream out) {  
            Iterator elements = files.iterator();  
            while (elements.hasNext()) {  
                File file=(File) elements.next();  
                    out.println(file.getPath());      
            }  
        }  
 
        public static void output(String path,String regexp) {  
 
            FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);  
            fileGroup1.print(System.out);  
        }  
      
        public static void main (String[] args) {  
            output("C:\\","[A-z|.]*");  
        } 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhouflye/archive/2010/03/25/5416350.aspx

  评论这张
 
阅读(235)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017