无线&移动互联网技术研发

换位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

正则表达式(本人常用)

Posted on 2009-05-08 13:55 Gavin.lee 阅读(301) 评论(0)  编辑  收藏 所属分类: java SE & EE
基础(摘)
  

\\  反斜杠
\t  间隔 ('\u0009')
\n  换行 ('\u000A')
\r  回车 ('\u000D')
\d  数字 等价于[0-9]
\D  非数字 等价于[^0-9]
\s  空白符号 [\t\n\x0B\f\r]
\S  非空白符号[^\t\n\x0B\f\r]
\w  单独字符[a-zA-Z_0-9]
\W  非单独字符 [^a-zA-Z_0-9]
\f  换页符
\e  Escape
\b  一个单词的边界
\B  一个非单词的边界
\G  前一个匹配的结束
/***************************************************/

^为限制开头
^java  条件限制为以Java为开头字符
/***************************************************/

$为限制结尾
java$  条件限制为以java为结尾字符
/***************************************************/

.条件限制除\n以外任意一个单独字符
java..  条件限制为java后除换行外任意两个字符

/***************************************************/

加入特定限制条件「[]」
[a-z]  条件限制在小写a to z范围中一个字符
[A-Z]  条件限制在大写A to Z范围中一个字符
[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符
[0-9]  条件限制在小写0 to 9范围中一个字符
[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符
[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)
/***************************************************/

[]中加入^后加再次限制条件[^]
[^a-z]  条件限制在非小写a to z范围中一个字符
[^A-Z]  条件限制在非大写A to Z范围中一个字符
[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符
[^0-9]  条件限制在非小写0 to 9范围中一个字符
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符
[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)
/***************************************************/

在限制条件为特定字符出现0次以上时,可以使用「*」
J*  0个以上J
.*  0个以上任意字符
J.*D  J与D之间0个以上任意字符
/***************************************************/

在限制条件为特定字符出现1次以上时,可以使用「+」
J+  1个以上J
.+  1个以上任意字符
J.+D  J与D之间1个以上任意字符
/***************************************************/

在限制条件为特定字符出现有0或1次以上时,可以使用「?」
JA?  J或者JA出现
/***************************************************/

限制为连续出现指定次数字符「{a}」
J{2}  JJ
J{3}  JJJ
/***************************************************/

文字a个以上,并且「{a,}」
J{3,}  JJJ,JJJJ,JJJJJ,???(3次以上J并存)
文字个以上,b个以下「{a,b}」
J{3,5}  JJJ或JJJJ或JJJJJ
/***************************************************/
两者取一「|」
J|A  J或A
Java|Hello Java或Hello



 
「()」中规定一个组合类型
比如,我查询<a href=\"index.html\">index</a>中<a href></a>间的数据,可写作<a.*href=\".*\">(.+?)</a>

在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数:
Pattern Pattern.compile(String regex, int flag)

flag的取值范围如下:
Pattern.CANON_EQ     当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式"a\u030A"会匹配"?"。默认情况下,不考虑"规 范相等性(canonical equivalence)"。
Pattern.CASE_INSENSITIVE(?i)     默认情况下,大小写不明感的匹配只适用于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹 配,只要将UNICODE_CASE与这个标志合起来就行了。
Pattern.COMMENTS(?x)     在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的"\\s",而是指表达式里的空格,tab,回车之类)。注释从#开始,一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。
Pattern.DOTALL(?s)     在这种模式下,表达式'.'可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式'.'不匹配行的结束符。
Pattern.MULTILINE
(?m)     在这种模式下,'^'和'$'分别匹配一行的开始和结束。此外,'^'仍然匹配字符串的开始,'$'也匹配字符串的结束。默认情况下,这两个表达式仅仅匹配字符串的开始和结束。
Pattern.UNICODE_CASE
(?u)     在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配。默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集。
Pattern.UNIX_LINES(?d)     在这个模式下,只有'\n'才被认作一行的中止,并且与'.','^',以及'$'进行匹配

 

package com.yixun.wap;

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

import com.Gavin.tools.util.WriteLog;
/** *//**
 * 
 * @descripte check format
 * 
@author Gavin.lee
 * @date 2009-5-20下午06:37:49
 * 
@version 1.0
 *
 
*/

public class CheckFormat {

    
//验证邮箱
    
    
public static boolean checkMail(String str) {
        Pattern pattern 
= Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
        Matcher matcher 
= pattern.matcher(str);
        
return matcher.matches();
    }

//验证中文,不能验证中文标点
    public static boolean checkChinese(String str) {
        Pattern pattern 
= Pattern.compile("[\u4e00-\u9fa5]+$"); 
        Matcher match 
= pattern.matcher(str); 
        
return match.matches();
    }

//双字节(包括中文)
    public static boolean checkDoubleByte(String str) {
        Pattern pattern 
= Pattern.compile("[^\\x00-\\xff]+$");
        Matcher match 
= pattern.matcher(str); 
        
return match.matches();
    }
    

//验证英文、数字、下划线的组合  5-16位
    public static boolean checkENU(String str) {
        Pattern pattern 
= Pattern.compile("[a-zA-Z0-9_]{4,15}$+$");  //^\w+$
        Matcher match = pattern.matcher(str);
        
return match.matches();
    }

//验证英文、数字的组合
    public static boolean checkEAN(String str) {
        Pattern pattern 
= Pattern.compile("[a-zA-Z0-9]+$");
        Matcher match 
= pattern.matcher(str);
        
return match.matches();
    }

//只英文
    public static boolean checkEnglish(String str) {
        Pattern pattern 
= Pattern.compile("[a-zA-Z]+$");
        Matcher match 
= pattern.matcher(str);
        
return match.matches();
    }

//只数字  
    public static boolean checkNumber(String str) {
        Pattern pattern 
= Pattern.compile("[0-9]+$");        //[^0-9]   非数字
        Matcher match = pattern.matcher(str);
        
return match.matches();
    }

/**//*
 * 大于1 浮点数、整数
 * 01.99    false
 * 0.99        false
 * 1.        false
 * 1.0        true
 * 1.00        true
 * 
 
*/

    
public static boolean checkFloat(String str) {
        Pattern pattern 
= Pattern.compile("[^0][0-9]*.{0,1}[0-9]{0,2}+$");        //[^0-9]   非数字
        Matcher match = pattern.matcher(str);
        
if(str.indexOf("."== 0{
            
return false;
        }
 else if (str.indexOf("."== (str.length()-1)) {
            
return false;
        }

        
        
return match.matches();
    }

//身份证验证   \d{15}|\d{18}
    public static boolean checkIdentityCard(String str) {
        Pattern pattern 
= Pattern.compile("\\d{15}|\\d{18}+$");        
        Matcher match 
= pattern.matcher(str);
        
return match.matches();
    }


//IP地址    \d+\.\d+\.\d+\.\d+
    public static boolean checkIP(String str) {
        Pattern pattern 
= Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d++$");        
        Matcher match 
= pattern.matcher(str);
        
return match.matches();
    }

    
//国内固话    \d{3}-\d{8}|\d{4}-\d{7}
    public static boolean checkPhoneNum(String str) {
        Pattern pattern 
= Pattern.compile("\\d{3}-\\d{8}|\\d{4}-\\d{7}+$");
        Matcher match 
= pattern.matcher(str);
        
return match.matches();
    }

//QQ验证 10000开始    [1-9][0-9]{4,}
    public static boolean checkQQ(String str) {
        Pattern pattern 
= Pattern.compile("[1-9][0-9]{4,}+$");        
        Matcher match 
= pattern.matcher(str);
        
return match.matches();
    }

//URL判定  http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?
    public static boolean checkURL(String str) {        
        Pattern pattern 
= Pattern.compile("http://([\\w-]+\\.)+[\\w-]+([\\w-.?%&=]*)?+$");        
        Matcher match 
= pattern.matcher(str);
        
return match.matches();
    }


    
public static void main(String args[]) {
//        System.out.println(CheckFormat.checkMail("doingjava@126.com"));
//        System.out.println(CheckFormat.checkChinese("易讯天空"));
//        System.out.println(CheckFormat.checkDoubleByte("易讯天空")); 
//        System.out.println(CheckFormat.checkENU("doing_java126")); 
//        System.out.println(CheckFormat.checkEAN("500wan"));
//        System.out.println(CheckFormat.checkEnglish("wan"));
//        System.out.println(CheckFormat.checkNumber("500"));
//        System.out.println(CheckFormat.checkIdentityCard("342401198606038578"));
//        System.out.println(CheckFormat.checkIP("192.168.9.17"));
//        System.out.println(CheckFormat.checkPhoneNum("0564-2649344"));
//        System.out.println(CheckFormat.checkQQ("496508302"));
//        System.out.println(CheckFormat.checkURL("http://wap.500wan.com.cn?id=1&name=gavin"));
//        WriteLog.writeLog("CheckFormat", "context");
        System.out.println(CheckFormat.checkFloat("1.00"));
//        System.out.println((".99").indexOf(".") == 0);
    }

}


 

 


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


网站导航: