因為小寶鴿正則表達式用得不多,一般也就網上找找js驗證手機號、郵箱、qq、身份證號碼的正則表達式,然后使用。那些正則表達式,看著似懂非懂的樣子,始終存在一些疑問,幾番想系統學習一下正則表達式,但是那些疑惑就像修仙大道的心結,讓我正則表達式水平毫無存進。最近剛好有這樣的時間把這些問題弄明白,并且對正則表達式有了入門的理解。
### (1)為什么很多JavaScript正則表達式串都是以“/”開頭并且以“/”結尾?
其實這是一種正則表達式的隱式構造方式.
在JavaScript里面,一般有兩種構造方式
1、用兩斜杠將正則表達式夾在中間。?
例:var reg = /\w+/;
2、使用new來創建。?
例:var reg = new RegExp(“\\w+”);?
注意:這里的\\w是雙斜杠,因為\本來就是字符串的轉義字符,這里就經過了兩次轉義了。
第二種是正則對象的顯式構造方法。
因此,如果你采用顯式構造方法一定記得把前后的/去掉哦,不然,哼。
### (2)為什么很多JavaScript正則表達式串都用^和$包含著正則表達式串
因為^ 和?$?語言元素與輸入字符串的開頭和結尾匹配。?
^表示必須以什么開頭?
$表示必須以什么結尾
^表示必須以什么開頭,這個好理解,關于$我們看下面的例子:
如我們想匹配以1開頭,后面跟著10數字(類似與手機號的弱驗證)?
那么我們正則表達式串可以這樣:^[1][\d]{10}$?
如果我們校驗字符串為:?
14564564564564654654654564654 //不匹配?
14564564564 //匹配
如果我們把正則表達式最后面的$去掉:^[1][\d]{10},?
結果是這樣:?
14564564564564654654654564654 //匹配?
14564564564 //匹配
如圖:



### (3)正則表達式除了用來驗證下手機號碼、身份證號碼,還能干什么?
正則表達式的用途
1、數據驗證,例如,可以測試輸入字符串,以查看字符串內是否出現電話號碼模式或信用卡號碼模式。這稱為數據驗證。
2、替換文本,可以使用正則表達式來識別文檔中的特定文本,完全刪除該文本或者用其他文本替換它。
3、基于模式匹配從字符串中提取子字符串,可以查找文檔內或輸入域內特定的文本。
關于,數據驗證,沒什么好說的,就是平時那些js驗證手機號啊,郵箱啊什么的,這里就不說了。
下面關于提取子字符串和替換文本,我們以Java為例,為什么是Java?誰讓Java是世界上最好的語言呢!是它,就是它,咳咳,客觀請看:
~~~
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestRegex {
public static void main(String[] args) {
//把 第“數字"條 全部查找出來然后換成 小寶鴿
String regex = "第[0-9]*條";
String str = "第9條,數據錯誤,錯誤信息,第jjj哦條哦條我的條件如何?第221條xx";
System.out.println(str);
Pattern pat = Pattern.compile(regex);
Matcher matcher = pat.matcher(str);
while (matcher.find()) {
String temp = str.substring(matcher.start(), matcher.end());
str = str.replaceAll(temp, "小寶鴿");
}
System.out.println(str);
//直接替換了
str = "第9條,數據錯誤,錯誤信息,第jjj哦條哦條我的條件如何?第221條xx";
System.out.println(str);
str = str.replaceAll(regex, "小寶鴿");
System.out.println(str);
}
}
~~~
提取子字符串和替換文本的例子都在上面的例子代碼里面體現啦
運行結果:

### (4)正則表達式內容不少,想要短時間全部掌握不可能,入門需要學習哪些呢?
下面,我們先簡單了解下這些語法:?
字符匹配:
| 字符 | 描述 |
| :-- | :-- |
| \d | 匹配數字(0~9) |
| \D | 匹配非數字 |
| \w | 匹配任意單字符 |
| \W | 匹配非單字符 |
| \s | 匹配空白字符 |
| \S | 匹配非空字符 |
| . | 匹配除換行符 \n之外的任何單字符。 |
| […] | 匹配括號中任意字符 |
| [^…] | 匹配非括號字符 |
重復匹配:
| 字符 | 描述 |
| :-- | :-- |
| {n} | 匹配n次字符 |
| {n,} | 匹配n次和n次以上 |
| {n,m} | 匹配n次上m次下 |
| ? | 匹配0或1次 |
| + | 匹配一次或多次 |
| * | 匹配0次以上 |
| 指明兩項之間的一個選擇。要匹配 |,請使用 \| |
字符定位:
| 字符 | 描述 |
| :-- | :-- |
| ^ | 定位后面模式開始位置 |
| $ | 前面模式位于字符串末端 |
| \A | 前面模式開始位置 |
| \z | 前面模式結束位置 |
| \Z | 前面模式結束位置(換行前) |
| \b | 匹配一個單詞邊界 |
| \B | 匹配一個非單詞邊界 |
轉義匹配:
| 字符 | 描述 |
| :-- | :-- |
| “\”+實際字符 | \ . * + ? ( ) { }^ $ |
| \n | 匹配換行 |
| \r | 匹配回車 |
| \t | 匹配水平制表符 |
| \v | 匹配垂直制表符 |
| \f | 匹配換頁 |
| \nnn | 匹配一個8進制ASCII |
| \xnn | 匹配一個16進制ASCII |
| \unnnn | 匹配4個16進制的Uniode |
| \c+大寫字母 | 匹配Ctrl-大寫字母 |
上面的語法來自于博文:[http://www.cnblogs.com/moss_tan_jun/archive/2010/08/15/1800281.html](http://www.cnblogs.com/moss_tan_jun/archive/2010/08/15/1800281.html)
上面的語法可能有些比較抽象,沒有看懂并沒有關系,日后用到在逐個研究。
了解了上面的語法之后我們來看看這些例子:
讓我們開始第一個驗證,輸入的字符在a-g之間?
~~~
[a-g]
~~~
輸入的字符在a-g之間并且長度為3?
~~~
[a-g]{3}
~~~
輸入的字符在a-g之間并且最大長度為3最小長度為1?
~~~
[a-g]{1,3}
~~~
我如何在匹配像91230456, 01237648那樣的固定8位數?
~~~
^[0-9]{8}$
~~~
驗證像INV190203 或 inv820830那樣的前3位是不區分大小寫的英文字母,剩余8位是數字
在前面的表達式中只能匹配前3個是小寫英文字母的發票編號,如果我們輸入大寫字母那就不能匹配了。所以為了確保前3個字母是不區分大小寫的,我們就要用表達式^[a-zA-Z]{3}。
完整的正則式如下:
~~~
^[a-zA-Z]{3}[0-9]{7}$
~~~
我們可以驗證簡單的網址URL格式嗎?
第一步:檢查是否存在www:
~~~
^www.
~~~
第二步:域名必須是長度在1-15的英文字母:
~~~
.[a-z]{1,15}
~~~
第三部:以.com或者.org結束:
~~~
.(com|org)$
~~~
完整的表達式如下:
~~~
^www[.][a-z]{1,15}[.](com|org)$
~~~
讓我們在來看看BCD(其實也就是上面說的3條基本語法)如何驗證email格式
第一步:email開始是長度在1-10的英文字母,最后跟一個”@”:
~~~
^[a-zA-Z0-9]{1,10}@
~~~
第二步:@后面是長度在1-10的英文字母,后面跟一個”.”:
~~~
[a-zA-Z]{1,10}.
~~~
第三步:最后以.com或.org結束:
~~~
.(com|org)$
~~~
最后完整的表達式如下:
~~~
^[a-zA-Z0-9]{1,10}@[a-zA-Z]{1,10}.(com|org)$
~~~
以上正則例子出自博文:[http://www.cnblogs.com/sxwgf/archive/2011/11/17/2252076.html](http://www.cnblogs.com/sxwgf/archive/2011/11/17/2252076.html),該博文還有日期驗證的例子。
上面的一些例子可能看官們能看到懂,但是自己不動手試試,還是不放心,因此下面推薦兩個在線測試正則表達式網站,可以驗證上面的例子!
正則表達式在線測試網站,這兩個網站都可以,挺好用的,但是個人還是推薦前者(雖然界面沒有那么美觀):?
[http://tool.chinaz.com/regex/](http://tool.chinaz.com/regex/)?
[http://tool.oschina.net/regex/](http://tool.oschina.net/regex/)
博主的正則表達式只是入門,如果上文有任何不正確的地方望評論糾正,不勝感激!
- 前言
- Java生成中間logo的二維碼(還可以加上二維碼名稱哦)
- Java我的高效編程之常用函數
- AES加密解密&&SHA1、SHA加密&&MD5加密
- Java中synchronized的使用實例
- Java基礎之集合
- Java基礎之泛型
- Java基礎之枚舉妙用
- 那些年用過的一些前端框架
- 關于正則,那些年一直存在的疑惑解答(正則菜鳥不容錯過)
- 給pdf文件添加防偽水印logo(附工程源碼下載)
- SpringMVC+BUI實現文件上傳(附詳解,源碼下載)
- Java異常封裝(自己定義錯誤碼和描述,附源碼)
- javaweb異常提示信息統一處理(使用springmvc,附源碼)
- 關于Java,那些我心存疑惑的事(不斷更新中...)
- 深入Java虛擬機(1)——Java體系結構
- 深入Java虛擬機(2)——Java的平臺無關性
- 深入Java虛擬機(3)——安全
- 深入Java虛擬機(4)——網絡移動性
- Linux文件編輯命令詳細整理
- 阿里云服務器云數據庫免費體驗(Java Web詳細實例)
- 項目部署、配置、查錯常用到的Linux命令
- Shell腳本了解
- Ajax原理學習
- linux下安裝apache(httpd-2.4.3版本)各種坑
- JSP九大內置對象
- Servlet再度學習
- 開發人員系統功能設計常用辦公軟件分享
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener問題解決
- tomcat內存溢出解決,java.lang.OutOfMemoryError: PermGen space
- 《Java多線程編程核心技術》推薦
- 關于跳槽,是我心浮氣躁?還是我確實該離開了?
- Java I/O學習(附實例和詳解)
- Java經典設計模式之五大創建型模式(附實例和詳解)
- Java經典設計模式之七大結構型模式(附實例和詳解)
- Java經典設計模式之十一種行為型模式(附實例和詳解)
- Java內存管理
- SQL實例整理
- 數據庫面試常問的一些基本概念