445IT之家
首頁 運營策劃 推廣優化 網上賺錢 站長新聞 網站制作 站長雜談 網頁制作 服務器 編程 電腦相關 論壇
您現在的位置:首頁 >> 編程 >> PHP教程 >> 內容

一篇文章讀懂正則表達

時間:2018-10-28 10:44:31 點擊:

  核心提示:一、正則簡介正則表達式是一種獨立的語言,可以運用如php、java等編程語言中。數據庫:SQL語言XML:Xpath正則:數據的檢索正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串...
一、正則簡介

正則表達式是一種獨立的語言,可以運用如php、java等編程語言中。
數據庫:SQL語言
XML:Xpath
正則:數據的檢索
正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等
關鍵詞:
select * from product where title=‘聯想手機’; //精確匹配
select * from product where title like ‘%手機%’;//模糊匹配
在js中,把要查詢的條件稱之為一種匹配模式
某種:由于模糊查詢,那么其匹配出來是多種多樣。
二、為什么使用正則表達式

1)信息隱藏
180****2818 135****23234
2)信息過濾
中國政府 中國zf
3)信息采集器
門戶、醫療,網址、電話
l8073o32818
4)數據匹配、數據查詢
三、快速入門

查找一個字符串中是否具有數字“8”


查找一個字符串中是否具有數字


查找一個字符串中是否具有非數字


四、正則對象

1、如何創建正則對象
1)隱式創建
數組:var arr = [元素];
正則:var reg = /正則表達式/模式;
2)顯示創建(直接實例化)
數組:var arr = new Array(元素);
正則:var reg = new RegExp(‘正則表達式’,’模式’);
兩種的實現的功能是一樣的,但是還有區別的?
語法不同


正則對象在顯示創建時,是寫在字符串中的,所以在使用時,必須對特殊字符進行轉義,從此點來看,我們推薦大家使用第一種隱式創建。
2、模式
g:global 全局匹配
i:ignore 忽略,忽略大小寫
五、如何去使用正則對象

RegExp類
test(str) : 判斷字符串中是否有指定模式匹配的字符或字符串 返回Boolbean
exec(str) : 返回指定模式的字符串
String 類
search : 返回指定模式的字符串所在位置
match : 返回指定模式的字符串,返回數組
replace : 返回指定模式替換后的字符串
split : 返回指定模式分割后的字符串,返回數組
split(‘|’)
split(‘\d’)
示例代碼:









六、幾個重要的概念

1、子表達式
在正則表達式中,通過一對小括號()括起來的表達式,我們稱之為子表達式
\d(\d)\d
2、捕獲
在js中,當通過子表達式匹配到相應的內容,系統會自動將其存儲緩存區中,我們把這個過程稱之為捕獲。
3、反向引用(后向引用)
在正則表達式中,我們可以通過\n(n代表緩存區域,是一個數字),獲取到緩存區中的存儲內容
\1\2
例1:匹配\d\d\dphp\d\d\d模式的字符


七、習題

查找連續的四個數字,如:3569
var reg=/\d\d\d\d/gi;
查找連續的相同的四個數字,如:1111
var reg=/(\d)\1\1\1/gi;
查找數字,如:1221,3443
var reg=/(\d)(\d)\2\1/gi;
查找字符,如:AABB,TTMM
var reg=/([a-z])\1([a-z])\2/gi;
查找連續相的四個數字或四個字符
擴展:給你一個字符串asdfasdfasdhello
fasdfsadfphpasdfaslkjl,通過正則表達式匹配出所有的html標簽及內容


八、exec與子表達式

例1:exec的使用方法


例2:exec與子表達式


效果:


說明:在我們的正則表達式中的方法exec與子表達式配合使用時,首先該程序會執行以下過程:
第一次執行:
首先在result[0]中顯示匹配到內容,第一個子表達式將追加到數組result中,如第一個就是result[1],如果存在第二個表達式,其會把緩存到的內容追加到result數組,成為result[2],后面以此類推。
九、正則表達式語法

重點:正則三步走
1)確定你要查什么
2)確定查多少
3)從哪里查
正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。
普通字符:a b c 1 2 3
特殊字符:\d \w \D
1、元字符中限定符
限定符可以指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配(三步走中的第二步)
* : 匹配0到多
+ : 匹配1到多
? : 匹配0或1
{n} : 匹配n次
{n,} : 最少匹配n次
{n,m} :最少匹配n次,最多匹配m次
在js正則表達式中,*,+,?可以采用{}的形式表示或代替
* :{0,}
+ :{1,}
? :{0,1}
例1:匹配已知數目的字符串


例2:匹配最少有多少個字符串


例3:匹配某一數量范圍內的字符串


2、貪婪模式與非貪婪模式
觀察以上例2與例3發現,當我們去匹配某一個數量返回內的數據,正則默認會匹配最多的那個結果,我們把這種效果稱之為
“貪婪匹配”,默認情況正則表達式采用的就是貪婪匹配模式
非貪婪匹配:匹配最少的那個情況,我們稱之為非貪婪匹配,可以采用?的形式實現。
非貪婪匹配示例代碼:


3、字符匹配符
字符匹配符用于匹配某個或某些字符
[]:在正則表達式稱之為字符簇(只匹配一個字符)
[a-z]:匹配a-z中的任一字符
[A-Z] :匹配A-Z中的任一字符
[0-9] :匹配數字0-數字9中的任一數字(\d)
[0-9a-z] : 匹配數字0-數字9或a-z中任一字符
[0-9a-zA-Z] : 匹配數字0-數字9或a-z或A-Z中的任一字符
[abcd] :匹配字符a或字符b或字符c或字符d
[1234] :匹配數字1或數字2或數字3或數字4、
^ : 上檔鍵,在正則中表示取反(僅限于字符簇)
[^a-z] :匹配除a-z中的任一字符
[^0-9] :匹配除0-9中的任一字符
[^abcd] :匹配除字符a或字符b或字符c或字符d以外的任一字符
\d :匹配一個數字字符。[0-9]
\D :匹配一個非數字字符。[^0-9]
\w :匹配包括下劃線的任何單詞字符。[0-9a-zA-z_]
\W :匹配任何非單詞字符。[^0-9a-zA-Z_]
\s :匹配任何空白字符 空格 換行 制表位
\S :匹配任何非空白字符。
. :匹配除 "\n" 之外的任何單個字符
例1:如何匹配任一字符
[.\n]
例2:\W是否可以匹配到\n


例3:通過[a-z]匹配任一a-z的字符


例4:匹配[A-Z]


例5:匹配\w


例6:匹配中文字符


擴展:如何匹配所有的中文字符
第一種:\\u5hs
第二種:數據字典
數據字典文件(中文字符)
通過遍歷篩選的方式進行查詢
txt
4、定位符
例1:如何去判斷一個人的年齡是否符合要求(01-99)


例2:如何去判斷一個手機號碼是否符合要求(待改正)


引入概念:
定位符可以將一個正則表達式固定在一行的開始或結束。也可以創建只在單詞內或只在單詞的開始或結尾處出現的正則表達式。
^ 匹配輸入字符串的開始位置
$ 匹配輸入字符串的結束位置
\b 匹配一個單詞邊界 開始 空格 結尾
\B 匹配非單詞邊界
例2:改進后的手機驗證正則表達式


例3:匹配一個單詞邊界\b


例4:匹配一個非單詞邊界


5、轉義符
\定義一個轉義符
/ . ( ) { } ‘ “ [ ] * ? + ^ $ -
在我剛才講過的有特殊意思的字符全部需要轉義
示例代碼:


6、選擇匹配符
在正則表達式可以采用|(或的意思)代表選擇匹配符
例1:


7、特殊用法
預查
(?=) :正向預查
(?!) : 反向預查
查詢結果,但不捕獲
(?:)
例1:正向預查


例2:負向預查


例3:查詢結果,但不捕獲


8、擴展:結巴程序
我...我是是..一個個...帥帥帥帥...哥!;
我是一個帥哥!
思路:
1、先把省略號去除掉,變成
我我是是一個個帥帥帥帥哥!
用到的知識:
正則知識點:\.+
替換:replace
2、去除掉重復的數據
我我是是一個個帥帥帥帥哥!
用到的知識:
正則:
通過點號匹配中文字符
通過子表達式捕獲數據
/(.)\1*/gi
替換:replace
難點:在replace中我要把匹配到數據替換成什么?
replace第二個參數可以直接引用緩存區中的內容,引用方式$n(n代表數字1到n)區域名


都看到這里就順手關注下吧~~~~ -_-

作者:不詳 來源:網絡
發表評論
  • 大名:
  • 內容:
評論列表
  • 好站推薦
  • 笑死人不償命的笑話
  • 文章閱讀網
  • 關于愛情的句子
  • 好句子大全
  • 最新個性簽名
  • 英語作文帶翻譯
  • 傷心網
  • 汽車之家報價
  • 汽車之家論壇
  • 汽車改裝網
  • 汽車改裝網
  • 汽車銷量排行榜
  • SUV銷量排行榜
  • SUV銷量排行榜
  • 汽車排行榜
  • 本類推薦
    • 沒有
  • 網站介紹 | 投稿指南 | 廣告合作 | 聯系我們 | 又問必答
  • 445IT之家(www.lbegpf.tw) © 2018 版權所有 All Rights Reserved.
  • 冀ICP備:05024815號
  • Powered by 445IT之家
  • 内蒙古十一选五走势图下载