亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

深入php 正則表達式的學習探討

2020-03-22 20:15:04
字體:
來源:轉載
供稿:網友
1、入門簡介簡單的說,html' target='_blank'>正則表達式是一種可以用于模式匹配和替換的強有力的工具。我們可以在幾乎所有的基于UNIX系統的工具中找到正則表達式的身影,例如,vi編輯器,Perl或PHP腳本語言,以及awk或sed shell程序等。此外,象JavaScript這種客戶端的腳本語言也提供了對正則表達式的支持。由此可見,正則表達式已經超出了某種語言或某個系統的局限,成為人們廣為接受的概念和功能。

正則表達式可以讓用戶通過使用一系列的特殊字符構建匹配模式,然后把匹配模式與數據文件、程序輸入以及WEB頁面的表單輸入等目標對象進行比較,根據比較對象中是否包含匹配模式,執行相應的程序。

舉例來說,正則表達式的一個最為普遍的應用就是用于驗證用戶在線輸入的郵件地址的格式是否正確。如果通過正則表達式驗證用戶郵件地址的格式正確,用戶所填寫的表單信息將會被正常處理;反之,如果用戶輸入的郵件地址與正則表達的模式不匹配,將會彈出提示信息,要求用戶重新輸入正確的郵件地址。由此可見正則表達式在WEB應用的邏輯判斷中具有舉足輕重的作用。2、基本語法在對正則表達式的功能和作用有了初步的了解之后,我們就來具體看一下正則表達式的語法格式。
正則表達式的形式一般如下:
/love/
其中位于“/”定界符之間的部分就是將要在目標對象中進行匹配的模式。用戶只要把希望查找匹配對象的模式內容放入“/”定界符之間即可。為了能夠使用戶更加靈活的定制模式內容,正則表達式提供了專門的“元字符”。所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,可以用來規定其前導字符(即位于元字符前面的字符)在目標對象中的出現模式。

較為常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符規定其前導字符必須在目標對象中連續出現一次或多次,“*”元字符規定其前導字符必須在目標對象中出現零次或連續多次,而“?”元字符規定其前導對象必須在目標對象中連續出現零次或一次。
下面,就讓我們來看一下正則表達式元字符的具體應用。
/fo+/
因為上述正則表達式中包含“+”元字符,表示可以與目標對象中的 “fool”, “fo”, 或者 “football”等在字母f后面連續出現一個或多個字母o的字符串相匹配。
/eg*/
因為上述正則表達式中包含“*”元字符,表示可以與目標對象中的 “easy”, “ego”, 或者 “egg”等在字母e后面連續出現零個或多個字母g的字符串相匹配。
/Wil?/
因為上述正則表達式中包含“?”元字符,表示可以與目標對象中的 “Win”, 或者 “Wilson”,等在字母i后面連續出現零個或一個字母l的字符串相匹配。
除了元字符之外,用戶還可以精確指定模式在匹配對象中出現的頻率。例如,
/jim{2,6}/
上述正則表達式規定字符m可以在匹配對象中連續出現2-6次,因此,上述正則表達式可以同jimmy或jimmmmmy等字符串相匹配。
在對如何使用正則表達式有了初步了解之后,我們來看一下其它幾個重要的元字符的使用方式。
/s:用于匹配單個空格符,包括tab鍵和換行符;
/S:用于匹配除單個空格符之外的所有字符;
/d:用于匹配從0到9的數字;
/w:用于匹配字母,數字或下劃線字符;
/W:用于匹配所有與/w不匹配的字符;
. :用于匹配除換行符之外的所有字符。
(說明:我們可以把/s和/S以及/w和/W看作互為逆運算)
下面,我們就通過實例看一下如何在正則表達式中使用上述元字符。
//s+/
上述正則表達式可以用于匹配目標對象中的一個或多個空格字符。
//d000/
如果我們手中有一份復雜的財務報表,那么我們可以通過上述正則表達式輕而易舉的查找到所有總額達千元的款項。除了我們以上所介紹的元字符之外,正則表達式中還具有另外一種較為獨特的專用字符,即定位符。定位符用于規定匹配模式在目標對象中的出現位置。

較為常用的定位符包括: “^”, “$”, “/b” 以及 “/B”。其中,“^”定位符規定匹配模式必須出現在目標字符串的開頭,“$”定位符規定匹配模式必須出現在目標對象的結尾,/b定位符規定匹配模式必須出現在目標字符串的開頭或結尾的兩個邊界之一,而“/B”定位符則規定匹配對象必須位于目標字符串的開頭和結尾兩個邊界之內,即匹配對象既不能作為目標字符串的開頭,也不能作為目標字符串的結尾。同樣,我們也可以把“^”和“$”以及“/b”和“/B”看作是互為逆運算的兩組定位符。舉例來說:
/^hell/
因為上述正則表達式中包含“^”定位符,所以可以與目標對象中以 “hell”, “hello”或 “hellhound”開頭的字符串相匹配。
/ar$/
因為上述正則表達式中包含“$”定位符,所以可以與目標對象中以 “car”, “bar”或 “ar” 結尾的字符串相匹配。
//bbom/
因為上述正則表達式模式以“/b”定位符開頭,所以可以與目標對象中以 “bomb”, 或 “bom”開頭的字符串相匹配。
/man/b/
因為上述正則表達式模式以“/b”定位符結尾,所以可以與目標對象中以 “human”, “woman”或 “man”結尾的字符串相匹配。
為了能夠方便用戶更加靈活的設定匹配模式,正則表達式允許使用者在匹配模式中指定某一個范圍而不局限于具體的字符。例如:
/[A-Z]/
上述正則表達式將會與從A到Z范圍內任何一個大寫字母相匹配。
/[a-z]/
上述正則表達式將會與從a到z范圍內任何一個小寫字母相匹配。
/[0-9]/
上述正則表達式將會與從0到9范圍內任何一個數字相匹配。
/([a-z][A-Z][0-9])+/
上述正則表達式將會與任何由字母和數字組成的字符串,如 “aB0” 等相匹配。這里需要提醒用戶注意的一點就是可以在正則表達式中使用 “()” 把字符串組合在一起。“()”符號包含的內容必須同時出現在目標對象中。因此,上述正則表達式將無法與諸如 “abc”等的字符串匹配,因為“abc”中的最后一個字符為字母而非數字。
如果我們希望在正則表達式中實現類似編程邏輯中的“或”運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符 “|”。例如:
/to|too|2/
上述正則表達式將會與目標對象中的 “to”, “too”, 或 “2” 相匹配。
正則表達式中還有一個較為常用的運算符,即否定符 “[^]”。與我們前文所介紹的定位符 “^” 不同,否定符 “[^]”規定目標對象中不能存在模式中所規定的字符串。例如:
/[^A-C]/
上述字符串將會與目標對象中除A,B,和C之外的任何字符相匹配。一般來說,當“^”出現在 “[]”內時就被視做否定運算符;而當“^”位于“[]”之外,或沒有“[]”時,則應當被視做定位符。
最后,當用戶需要在正則表達式的模式中加入元字符,并查找其匹配對象時,可以使用轉義符“/”。例如:
/Th/*/
上述正則表達式將會與目標對象中的“Th*”而非“The”等相匹配。3、使用實例①PHP中可以使用ereg()函數進行模式匹配操作。ereg()函數的使用格式如下:

以下為引用的內容:
ereg(pattern, string)
其中,pattern代表正則表達式的模式,而string則是執行查找替換操作的目標對象。同樣是驗證郵件地址,使用PHP編寫的程序代碼如下:
復制代碼 代碼如下:
?php
if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+”,$email)){
echo “Your email address is correct!”;}
else{
echo “Please try again!”;
}
?

②JavaScript 1.2中帶有一個功能強大的RegExp()對象,可以用來進行正則表達式的匹配操作。其中的test()方法可以檢驗目標對象中是否包含匹配模式,并相應的返回true或false。我們可以使用JavaScript編寫以下腳本,驗證用戶輸入的郵件地址的有效性。
以下為引用的內容:
復制代碼 代碼如下:
html
head
script language=/"Javascript1.2/"
!-- start hiding
function verifyAddress(obj)
{
var email = obj.email.value;
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/;
flag = pattern.test(email);
if(flag)
{
alert(“Your email address is correct!”);
return true;
}
else
{
alert(“Please try again!”);
return false;
}
}
// stop hiding --
/script
/head
body
form onSubmit=/"return verifyAddress(this);/"
input name=/"email/" type=/"text/"/
input type=/"submit/"/
/form
/body
/html

想必很多人都對正則表達式都頭疼。今天,我以我的認識,加上網上一些文章,希望用常人都可以理解的表達方式。來和大家分享學習經驗。開篇,還是得說說 ^ 和 $ 他們是分別用來匹配字符串的開始和結束,以下分別舉例說明:“^The”:開頭一定要有”The”字符串;
“of despair$”:結尾一定要有”of despair” 的字符串;那么,
“^abc$”:就是要求以abc開頭和以abc結尾的字符串,實際上是只有abc匹配;
“notice”:匹配包含notice的字符串;你可以看見如果你沒有用我們提到的兩個字符(最后一個例子),就是說模式(正則表達式)可以出現在被檢驗字符串的任何地方,你沒有把他鎖定到兩邊。接著,說說 ‘*' ‘+' 和 ‘?'
他們用來表示一個字符可以出現的次數或者順序,他們分別表示:
“zero or more”相當于{0,}
“one or more”相當于{1,}
“zero or one.”相當于{0,1}這里是一些例子:“ab*”:和ab{0,}同義,匹配以a開頭,后面可以接0個或者N個b組成的字符串(”a”, “ab”, “abbb”, 等);
“ab+”:和ab{1,}同義,同上條一樣,但最少要有一個b存在 (”ab” “abbb”等);
“ab?”:和ab{0,1}同義,可以沒有或者只有一個b;
“a?b+$”:匹配以一個或者0個a再加上一個以上的b結尾的字符串。要點:'*' ‘+' 和 ‘?' 只管它前面那個字符。你也可以在大括號里面限制字符出現的個數,比如:“ab{2}”: 要求a后面一定要跟兩個b(一個也不能少)(”abb”);
“ab{2,}”: 要求a后面一定要有兩個或者兩個以上b(如”abb” “abbbb” 等);
“ab{3,5}”: 要求a后面可以有2-5個b(”abbb”, “abbbb”, or “abbbbb”)?,F在我們把一定幾個字符放到小括號里,比如:“a(bc)*”: 匹配 a 后面跟0個或者一個”bc”;
“a(bc){1,5}”: 一個到5個 “bc”;還有一個字符 ‘|',相當于OR操作:“hi|hello”: 匹配含有”hi” 或者 “hello” 的 字符串;
“(b|cd)ef”: 匹配含有 “bef” 或者 “cdef”的字符串;
“(a|b)*c”: 匹配含有這樣多個(包括0個)a或b,后面跟一個c的字符串;一個點('.')可以代表所有的單一字符,不包括”/n”如果,要匹配包括”/n”在內的所有單個字符,怎么辦?用'[/n.]'這種模式?!癮.[0-9]”: 一個a加一個字符再加一個0到9的數字;
“^.{3}$”: 三個任意字符結尾。中括號括住的內容只匹配一個單一的字符“[ab]”: 匹配單個的 a 或者 b ( 和 “a│b” 一樣);
“[a-d]”: 匹配'a' 到'd'的單個字符 (和”a│b│c│d” 還有 “[abcd]”效果一樣);一般我們都用[a-zA-Z]來指定字符為一個大小寫英文:“^[a-zA-Z]”: 匹配以大小寫字母開頭的字符串;
“[0-9]%”: 匹配含有 形如 x% 的字符串;
“,[a-zA-Z0-9]$”: 匹配以逗號再加一個數字或字母結尾的字符串;你也可以把你不想要得字符列在中括號里,你只需要在總括號里面使用'^' 作為開頭 “%[^a-zA-Z]%” 匹配含有兩個百分號里面有一個非字母的字符串。要點:^用在中括號開頭的時候,就表示排除括號里的字符。為了PHP能夠解釋,你必須在這些字符面前后加”,并且將一些字符轉義。不要忘記在中括號里面的字符是這條規路的例外—在中括號里面,所有的特殊字符,包括(”),都將失去他們的特殊性質 “[*/+?{}.]”匹配含有這些字符的字符串:還有,正如regx的手冊告訴我們:”如果列表里含有']',最好把它作為列表里的第一個字符(可能跟在'^'后面)。如果含有'-',最好把它放在最前面或者最后面, or 或者一個范圍的第二個結束點[a-d-0-9]中間的‘-'將有效。看了上面的例子,你對{n,m}應該理解了吧。要注意的是,n和m都不能為負整數,而且n總是小于m。這樣,才能 最少匹配n次且最多匹配m次。如”p{1,5}”將匹配 “pvpppppp”中的前五個p下面說說以/開頭的/b 書上說他是用來匹配一個單詞邊界,就是…比如've/b',可以匹配love里的ve而不匹配very里有ve/B 正好和上面的/b相反。例子我就不舉了…..突然想起來….可以到 http://www.phpv.net/article.php/251 看看其它用/開頭的語法好,我們來做個應用:如何構建一個模式來匹配貨幣數量的輸入。構建一個匹配模式去檢查輸入的信息是否為一個表示money的數字。我們認為一個表示money的數量有四種方式:”10000.00″ 和 “10,000.00″,或者沒有小數部分,”10000″ and “10,000″?,F在讓我們開始構建這個匹配模式:^[1-9][0-9]*$這是所變量必須以非0的數字開頭。但這也意味著單一的”0″也不能通過測試。以下是解決的方法:^(0|[1-9][0-9]*)$“只有0和不以0開頭的數字與之匹配”,我們也可以允許一個負號在數字之前:^(0|-?[1-9][0-9]*)$這就是:0或者一個以0開頭且可能有一個負號在前面的數字。好了,現在讓我們別那么嚴謹,允許以0開頭?,F在讓我們放棄負號,因為我們在表示錢幣的時候并不需要用到。我們現在指定模式用來匹配小數部分:^[0-9]+(/.[0-9]+)?$這暗示匹配的字符串必須最少以一個阿拉伯數字開頭。但是注意,在上面模式中 “10.” 是不匹配的, 只有 “10″ 和 “10.2″ 才可以,你知道為什么嗎?^[0-9]+(/.[0-9]{2})?$我們上面指定小數點后面必須有兩位小數。如果你認為這樣太苛刻,你可以改成:^[0-9]+(/.[0-9]{1,2})?$這將允許小數點后面有一到兩個字符。現在我們加上用來增加可讀性的逗號(每隔三位),我們可以這樣表示:^[0-9]{1,3}(,[0-9]{3})*(/.[0-9]{1,2})?$不要忘記'+'可以被'*'替代如果你想允許空白字符串被輸入話,也不要忘記反斜桿'/'在php字符串中可能會出現錯誤 (很普遍的錯誤):現在,我們已經可以確認字符串了,我們現在把所有逗號都去掉str_replace(”,”, “”, $money)然后在把類型看成double然后我們就可以通過他做數學計算了。再來一個:構造檢查email的正則表達式在一個完整的email地址中有三個部分:1. 用戶名 (在 ‘@' 左邊的一切)
2.'@'
3. 服務器名(就是剩下那部分)用戶名可以含有大小寫字母阿拉伯數字,句號('.')減號('-')and下劃線'_')。服務器名字也是符合這個規則,當然下劃線除外?,F在,用戶名的開始和結束都不能是句點,服務器也是這樣。還有你不能有兩個連續的句點他們之間至少存在一個字符,好現在我們來看一下怎么為用戶名寫一個匹配模式:^[_a-zA-Z0-9-]+$現在還不能允許句號的存在。我們把它加上:^[_a-zA-Z0-9-]+(/.[_a-zA-Z0-9-]+)*$上面的意思就是說:以至少一個規范字符(除了.)開頭,后面跟著0個或者多個以點開始的字符串。簡單化一點, 我們可以用eregi()取代ereg()、eregi()對大小寫不敏感, 我們就不需要指定兩個范圍 “a-z” 和 “A-Z”只需要指定一個就可以了:^[_a-z0-9-]+(/.[_a-z0-9-]+)*$后面的服務器名字也是一樣,但要去掉下劃線:^[a-z0-9-]+(/.[a-z0-9-]+)*$好?,F在只需要用”@”把兩部分連接:^[_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$這就是完整的email認證匹配模式了,只需要調用:eregi(”^[_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$”,$eamil)就可以得到是否為email了正則表達式的其他用法提取字符串ereg() and eregi() 有一個特性是允許用戶通過正則表達式去提取字符串的一部分(具體用法你可以閱讀手冊)。比如說,我們想從 path/URL 提取文件名,下面的代碼就是你需要:ereg(”([^///]*)$”, $pathOrUrl, $regs);
echo $regs[1];高級的代換ereg_replace() 和 eregi_replace()也是非常有用的,假如我們想把所有的間隔負號都替換成逗號:ereg_replace(”[ /n/r/t]+”, “,”, trim($str));最后,我把另一串檢查EMAIL的正則表達式讓看文章的你來分析一下:“^[-!#$%&/'*+//./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&/'*+///0-9=?A-Z^_`a-z{|}~]+/.'.'[-!#$%&/'*+//./0-9=?A-Z^_`a-z{|}~]+$”如果能方便的讀懂,那這篇文章的目的就達到了。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国语自产精品视频在线看一大j8| 亚洲第一综合天堂另类专| 欧美第一黄色网| 午夜精品久久久久久久久久久久久| 精品自拍视频在线观看| 色综合久久88色综合天天看泰| 久久久久久久久久久久久久久久久久av| 色与欲影视天天看综合网| 黑人巨大精品欧美一区二区免费| 中文字幕一区二区精品| 九九九久久久久久| 国产精品美女在线| 国产成人精品在线视频| 欧美人成在线视频| 国产精品观看在线亚洲人成网| 亚洲精品自产拍| 精品亚洲一区二区三区| 北条麻妃久久精品| 欧美国产日韩一区| 日韩欧美国产中文字幕| 日韩欧美a级成人黄色| 亚洲丝袜一区在线| 亚洲国产精品yw在线观看| 亚洲国产成人精品久久久国产成人一区| 欧美精品做受xxx性少妇| 性色av一区二区三区免费| 91大神福利视频在线| 深夜福利亚洲导航| 亚洲欧美在线磁力| 日韩在线观看免费网站| 神马久久久久久| 日韩中文综合网| 欧美激情亚洲一区| 疯狂蹂躏欧美一区二区精品| 日韩欧美成人免费视频| 成人精品一区二区三区| 91网站免费观看| 亚洲色无码播放| 久久久久久久久综合| 日韩欧美在线播放| 成人黄色在线免费| 国产精品在线看| 国产99久久精品一区二区| 日韩av免费在线播放| 国产精品国内视频| 久久成年人视频| 国产一区二区激情| xxav国产精品美女主播| 欧美激情在线狂野欧美精品| 亚洲免费视频网站| 欧美日韩中文在线| 国产精品成人一区| 日韩最新av在线| 中文字幕精品久久久久| 亚洲二区在线播放视频| 欧美亚洲国产视频| 欧美成人免费网| 日韩欧美精品在线观看| 午夜精品一区二区三区在线视| 国产91在线播放九色快色| 日韩精品福利在线| 久久精品99久久久香蕉| 日韩最新中文字幕电影免费看| 欧美日韩亚洲国产一区| 久久久久久久久爱| 国产精品视频xxxx| 九九热精品视频在线播放| 日韩成人在线视频| 国产一区二区激情| 日本三级韩国三级久久| 亚洲成avwww人| 美女少妇精品视频| 色综合导航网站| 亚洲欧美综合区自拍另类| 久热精品视频在线| 国产在线精品成人一区二区三区| 高潮白浆女日韩av免费看| 国外成人在线播放| 成人国产亚洲精品a区天堂华泰| 国产成人午夜视频网址| 欧美日韩国产激情| 亚洲国产精品高清久久久| 国产精品扒开腿做爽爽爽男男| 日本免费一区二区三区视频观看| …久久精品99久久香蕉国产| 日韩中文字幕视频在线| 成人在线播放av| 中文字幕久久久| 国产精品成人国产乱一区| 人人澡人人澡人人看欧美| 国产成人aa精品一区在线播放| 亚洲另类欧美自拍| 亚洲视频自拍偷拍| 国产精品久久久久久久久免费| 亚洲老头老太hd| 国内精品一区二区三区| 亚洲精品国产精品国自产观看浪潮| 欧美激情精品久久久久久黑人| 在线播放精品一区二区三区| 精品国内自产拍在线观看| 精品国产乱码久久久久久天美| 久久999免费视频| 亚洲91精品在线观看| 国产欧美日韩91| 亚洲国产又黄又爽女人高潮的| 亚洲已满18点击进入在线看片| 日韩专区在线观看| 日韩视频永久免费观看| 亚洲精品久久久久久久久久久久久| 国产激情久久久| 在线播放国产一区二区三区| 亚洲午夜小视频| www.日韩视频| 欧美午夜性色大片在线观看| 国产精品免费久久久久影院| 亚洲欧美综合另类中字| 日韩精品极品视频| 国产一区二区三区视频在线观看| 成人国产精品久久久久久亚洲| 精品一区二区亚洲| 欧美日韩中文字幕| 久久精品国产2020观看福利| 亚洲日本欧美中文幕| 亚洲天堂男人天堂女人天堂| 国产激情久久久久| 午夜精品理论片| 91久久久久久久一区二区| 91chinesevideo永久地址| 亚洲欧美日本伦理| 国内自拍欧美激情| 久青草国产97香蕉在线视频| 亚洲成人av片在线观看| 91精品国产91久久久久福利| 欧美电影免费观看大全| 精品久久久91| 性色av香蕉一区二区| 91大神在线播放精品| 亚洲r级在线观看| 久久天天躁夜夜躁狠狠躁2022| 欧美激情乱人伦一区| 亚洲午夜小视频| 国产欧美中文字幕| 一个人看的www欧美| 国产欧美精品va在线观看| 国产精品高清在线| 亚洲精品免费一区二区三区| 国产精品av免费在线观看| 国产精品日韩一区| 精品视频9999| 国产91久久婷婷一区二区| 97在线视频观看| 亚洲无亚洲人成网站77777| 日韩精品一二三四区| 日韩欧美一区二区三区久久| 国产精品在线看| 精品日韩视频在线观看| 亚洲人成毛片在线播放| 亚洲精美色品网站| 97人人爽人人喊人人模波多| 久久精品久久久久久| 日韩av手机在线看| 精品国产美女在线| 久久久人成影片一区二区三区观看| 久久精品美女视频网站|