正規表達式 學習筆記一
徒弟:師傅呀,我接到新任務,要過濾字元串,進行篩選,一個個對比,貌似好麻煩喲!
師傅:都什麼年代啦,你的效率低不低呀?用正則吧,,誰用誰知道好!
1、什麼是正規表達式
在計算機科學中,是指一個用來描述或者比對一系列符合某個句法規則的字元串的單個字元串。在很多文本編輯器或其他工具裡,正規表達式通常被用來檢索和/或替換那些符合某個模式的文本内容。許多程式設計語言都支援利用正規表達式進行字元串操作。例如,在Perl中就内建了一個功能強大的正規表達式引擎。正規表達式這個概念最初是由Unix中的工具軟體(例如sed和grep)普及開的。正規表達式通常縮寫成“regex”,單數有regexp、regex,複數有regexps、regexes、regexen。
參考網址:http://baike.baidu.com/view/94238.htm
2、功能強大的文本處理語言
正規表達式是一種威力無比強大的武器,幾乎在所有的程式設計語言裡和計算機平台上都可以用它來完成各種複雜的文本處理工作。本書從簡單的文本比對開始,循序漸進地介紹了很多複雜内容,其中包括回溯引用、條件性求值和前後查找,等等。每章都為讀者準備了許多簡明又實用的示例,有助于全面、系統、快速掌握正規表達式,并運用它們去解決實際問題。
3、相對傳統文本處理的優勢:
1)、靈活
2)、高效
3)、強大
4)、便捷
4、正規表達式執行個體
執行個體一:
驗證數字字元串
要求:驗證一個字元串是否全部由數字構成
看個例子:
傳統的程式設計方式:
public class GeneralNumTest {
public static void main(String[] args) {
String[] values = new String[] { "10", "325678", "987799", "99999","amd", "nvdita", "86BF" };
for (String value : values) {
System.out.println("校驗值:\t" + value);
if (isOctNumber(value)) {
System.out.println("[" + value + "] 校驗是數字");
}
if (isHexNumber(value)) {
System.out.println("[" + value + "] 校驗是16進制數字");
//16進制校驗
private static boolean isHexNumber(String value) {
boolean result = true;
for (int i = 0, j = value.length(); i < j; i++) {
char c = value.charAt(i);
if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9'
|| c == 'a' || c == 'b' || c == 'c' || c == 'd' || c == 'e' || c == 'f'|| c == 'A' || c == 'B' || c == 'C' || c == 'D' || c == 'E' || c == 'F') {
continue;
}else{
result = false;
break;
return result;
// 傳統校驗方式
private static boolean isOctNumber(String value) {
if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4'|| c == '5' || c == '6' || c == '7' || c == '8' || c == '9') {
運作結果,這裡就不展示了。
正規表達式對數字字元串驗證的解法:
public static final String OCT_NUM_REGEX = "\\d+";
public static final String HEX_NUM_REGEX = "(?i)[0-9a-f]+";
String validateRegx = Regexes.HEX_NUM_REGEX;
return value.matches(validateRegx);
String validateRegx = Regexes.OCT_NUM_REGEX;
依賴的Regexes:
public class Regexes {
運作結果:
校驗值: 10
[10] 校驗是數字
[10] 校驗是16進制數字
校驗值: 325678
[325678] 校驗是數字
[325678] 校驗是16進制數字
校驗值: 987799
[987799] 校驗是數字
[987799] 校驗是16進制數字
校驗值: 99999
[99999] 校驗是數字
[99999] 校驗是16進制數字
校驗值: amd
校驗值: nvdita
校驗值: 86BF
[86BF] 校驗是16進制數字
執行個體二:
驗證email位址
要求:驗證一個字元串是否合法的email位址
public class EamilTest {
String[] emails = new String[] { "[email protected]",
"[email protected]", "[email protected]",
".leemaster@163", "luckdog.com" };
for(String email:emails){
System.out.println("驗證的eamil是:"+email);
if(isValideEmail(email)){
System.out.println("["+email+"] 是有效的郵件位址");
private static boolean isValideEmail(String email) {
return email.matches(Regexes.EMAIL_REGEX);
public static final String EMAIL_REGEX = "(?i)(?<=\\b)[a-z0-9][-a-z0-9_.]+[a-z0-9]@([a-z0-9][-a-z0-9]+\\.)+[a-z]{2,4}(?=\\b)";
驗證的eamil是:[email protected]
[[email protected]] 是有效的郵件位址
驗證的eamil是:[email protected]
[[email protected]] 是有效的郵件位址
驗證的eamil是:[email protected]
[[email protected]] 是有效的郵件位址
驗證的eamil是:.leemaster@163
驗證的eamil是:luckdog.com
未完待續。。。
本文轉自jooben 51CTO部落格,原文連結:http://blog.51cto.com/jooben/316587