所謂的正規表示式就是用來操作字串的,正規表示式雖然簡化了**功能的實現,但是閱讀性變得較差,所以要能熟練的使用的正則表達的就必須要熟練的記住具體符號的含義。
eg1:
public class regexdemo ";//正規表示式。
boolean b = qq.matches(regex);
system.out.println(qq+":"+b);}
}
上面的**就是乙個簡單的正規表示式的使用,其中的''表示的就是當前位置的元素的可取的值,『{}』表示的就是前一位的可以出現的次數,上面的正規表示式表示的就是第一位部位0,(這裡使用了[1-9]就是表示的是只能是1-9中的其中乙個數字)第二位是0到9中的任意的乙個數字,後面的就是和第二位的一樣,因此就可以使用來表示的,表示的就是後面的可以出現和第二位一樣的四次到九次。定義完了正規表示式後就可以使用函式matches()來判斷字串是否否和要求了。
eg2:
正規表示式常見的操作用如下的集中用法
1)匹配字串:其實就是呼叫字串的matches()的方法,eg1就是乙個匹配的簡單的使用。注意在字串中有些預定義的字元如:\d表示的就是數字類,\d表示的就是非數字類,如在實際中用的比較多的就是判斷是否是手機號的正規表示式:
/*手機號的第一位是固定的『1』,第二位是3,4,5,7,8中的一位,而後面剩下的資料就是九位常用的數字了,這裡使用了預定符來表示的,注意這裡要使用的是\\因為這裡的\d表示的是數字,如果只寫乙個的話表示的就是乙個轉移符,所以要使用\\來表示乙個『\』*/
string regex = "1[34578]\\d";
string str = "15553458907";
boolean b = str.matcher(regex);
2)切割字串,其實就是相當於字串中的split();方法了。
string str = "hellottttxiaoqiangmmmmmmworld";
string names = str.split("(.)\\1+");"\\.");
for(string name : names)
上面的**使用了正規表示式中的組的概念,在正規表示式中使用'()'表示乙個組,在上面中使用(.)表示的就是第乙個為任意的字元,而後面的\\1+是乙個數量詞,這裡表示的就是前乙個字元出現的次數必須是大於1的,如果這裡只寫乙個1而沒有轉移符表示的就是1字元。
3)替換,其實就是呼叫字串中replaceall()方法了。
string str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
str = str.replaceall("(.)\\1+", "$1");//結果為zhangsantxiaoqiangmzhaoliu
system.out.println(str);
string tel = "15800001111";//158****1111;
tel = tel.replaceall("(\\d)\\d(\\d)", "$1****$2");//2
system.out.println(tel);
上面的**使用了替換,而且這裡還是用了正規表示式中的值,在replaceall方法中如果第二個引數要使用第乙個引數的中正規表示式的值,那麼需要使用$符號了,1表示的就是第一組的值。在2地方上使用了在**中常用的乙個隱藏的手法,就是將手機好的中間的數字給隱藏起來,就是使用了這種用法。
4)獲取,這個方法是比較複雜的,簡單的理解就是從某乙個字串中解析出字需要的字串
string str = "zhe li shi yong le zheng ze biao da shi!";
string regex = "\\b[a-z]\\b";
//1,將正則封裝成物件。
pattern p = pattern.compile(regex);
//2, 通過正則物件獲取匹配器物件。
matcher m = p.matcher(str);
//使用matcher物件的方法對字串進行操作。
//既然要獲取三個字母組成的單詞
//查詢。 find();
system.out.println(str);
while(m.find())
上面的**實現的是將str字串中的三個字母的字元選擇出來,這裡使用了乙個邊界符\\b,如果不適用的會選擇出bia(biao)這就不符合實際的要求了。這裡首先要將正規表示式封裝成乙個pattern物件,然後通過這個物件的matcher方法來操作這個字串,最後使用通過group方法來獲取匹配的字元物件。
反射技術(理解):
所謂的反射技術就是動態的獲取指定檔案的class檔案。tomcat就是通過反射技術來實現處理使用者請求的,tomcat對外暴漏了
servlet介面,程式設計師通過實現這個介面來處理相應的請求,然後在web.xml的配置檔案中配置這個servlet的資訊,在tomcat的
內部就可以通過這個配置檔案來得到這個類,從而處理相應的請求。
反射簡單的理解就是獲取乙個類的位元組碼檔案,然後就可以通過這個位元組碼檔案來操作類中的所有的方法和屬性了。獲取某乙個
類的位元組碼檔案物件有三種方式:
1、person p = new person();
class clazz = p.getclass();
2、class clazz = person.class();
3、class clazz = class.forname("org.test.person")//這裡要寫全名,否則會報錯的!!!
其中第三種是最常用的一種方式
使用反射的好處:
在實際的開發中使用反射技術的擴充套件性很好,因為在實際中只需要給配置檔案相應的配置資訊就可以得到對應類的位元組碼檔案,然後
通過這個檔案就可以操作具體的類了,這裡包括建立例項,建立乙個不帶引數的例項是通過位元組碼檔案的newinstance()方法來得到的
(執行的過程是通過給的字串型別的類名來找到對應的位元組碼檔案,然後將其載入到記憶體中的)如果這裡的物件沒有乙個空的建構函式
的話就會報錯,這時候要建立建構函式的話就需要使用
string name = "org.reflect.bean.person";
//找尋該名稱類檔案,並載入進記憶體,並產生class物件。
class clazz = class.forname(name);
//獲取到了指定的建構函式物件。這裡假設person的建構函式是乙個string型別和int型別的引數
constructor constructor = clazz.getconstructor(string.class,int.class);//在這裡也要使用建構函式的位元組碼檔案來
//通過該構造器物件的newinstance方法進行物件的初始化。
object obj = constructor.newinstance("小明",38);
正規表示式的簡單介紹
一般用於轉義字元 斷言目標的開始位置 或在多行模式下是行首 斷言目標的結束位置 或在多行模式下是行尾 匹配除換行符外的任何字元 預設 開始字元類定義 結束字元類定義 開始乙個可選分支 子組的開始標記 子組的結束標記 作為量詞,表示 0 次或 1 次匹配。位於量詞後面用於改變量詞的貪婪特性。查閱量詞 ...
正規表示式介紹
一 前言 對於正規表示式,相信很多人都知道,但是很多人的第一感覺就是難學,因為看第一眼時,覺得完全沒有規律可尋,而且全是一堆各種各樣的特殊符號,完全不知所云。其實只是對正則不了解而以,了解了你就會發現,原來就這樣啊正則所用的相關字元其實不多,也不難記,更不難懂,唯一難的就是組合起來之後,可讀性比較差...
正規表示式 介紹
表示式全集 字元 描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了regexp物件的multiline屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的...