js和java中正則表達式的易混淆點
js中正則表達式的使用 對錶單中的值進行正則表達式匹配通常有兩種方法: var reg = new RegExp(regStr); reg.test(value); 以下: var reg = new RegExp(「\\d{3}」); reg.test(「abc123def」); 結果:true 注:new RegExp中傳的是正則表達式的字符串,\須要用\轉義。 str.match(regex); 如」abc123def」.match(/\d{5}/); 結果:123 注:match中傳的是正則表達式。不須要加」」,以/開頭和結束。\不須要轉義。
js中對值的全匹配 一般在寫網頁時要用js對錶單中的用戶名、Email等驗證。這時候驗證並非在value值中找到某一部分,而是要匹配所有。以下 如上圖,若是用如下代碼驗證 var reg = new RegExp(「[a-zA-Z]{6,8}」); reg.test(value) 當6個如下字符時是不匹配的,6-8個時是匹配的,但8個以上時仍然是匹配的。 js中正則表達式相關函數RegExp.test()和String.match()等函數都是在字符串中尋找是否有符合正則表達式的,而非字符串必定要和正則表達式想對應。 因此若是想要按要求匹配,應該加上開始結束字符,開頭和結尾統一內容,正確的正則表達式:/^[0-9a-zA-Z]{6,8}$/
java正則表達式的轉義 java中轉義要轉兩層,好比要匹配字符\s 在java中的匹配表示\\\\s 第一層次:’\s’在正則表達式,轉義爲:‘\\s’ 第 二層次:在java中,這時轉的再也不是’\s’,而是’\\s’(其實就是java將代碼翻譯成正則表達式去匹配,因此這裏,java翻譯的是’ \\s’),而java的轉義符號也是’\’,因此java的匹配表達式變爲:’\\’第一個’\’,’\\’第二個’\’,最後加上’s’,因此獲得的 是:‘\\\\s’
java中的matches()和matcher()的區別 String對象和Pattern類都有matches()方法,參數不一樣,但二者匹配類型同樣,都是字符串與正則表達式互相匹配才爲真 以下java代碼 Pattern.matches(「ddd\\d{3}」, 「ddd12344″); 返回是假,雖然字符串有正則表達式符合的,但沒有與所有字符串匹配。 Pattern對象的matcher()方法則是在字符串中尋找匹配的部分。以下java代碼 Pattern pattern = Pattern.compile(「ddd\\d{3}」); Matcher m = pattern.matcher(「ddd123ddd456″); while(m.find()){ System.out.println(m.group()); } 返回結果是: ddd123 ddd456 若是正則表達式是 「^ddd\\d{3}$」,則不會有符合匹配的。
做者:華CC博客
出處:
http://www.huahongbin.cn/?p=23 本人在不斷學習中,文章在表述和代碼方面若有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論哦。你也能夠關注我,一塊兒學習哦!
歡迎關注本站公眾號,獲取更多信息