国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

正則表達式易錯點小結!

邱勇 / 2530人閱讀

摘要:舉例說明百度谷歌正則如下結果是把全部的字符串都匹配到了其實,我們只需要加上修飾符,這樣,這樣一旦成功匹配一次的話,正則就不會繼續進行匹配了個人認為應該是的意思,表示在匹配的時候忽略大小寫。

最近在學習正則表達式,發現原來理解的正則表達式不是特別的準確,甚至有誤!在這里簡單記錄一下,希望對有的朋友能夠有所幫助!

①“[]”:字符集(字符簇,字符組……)
他的真正含義是"或"的意思!例如:[123],它代表的含義是,匹配一個1或2或3!

由于它經常是用于匹配多個可能的值,所以支持一種簡寫的方式! 例如:[12345678]可以簡寫為[1-8]
[abcdefghjik]可以簡寫為[a-k] [1234567ABCDEFG]可以簡寫為[1-7A-G]

“[]”相關的陷阱!
(1)在”[]”中的大部分元字符都是普通字符,都不在具有元字符的含義!但是仍然有個別的元字符除外!
“-”,“^”,目前只知道這兩個,可能還有其他的,待補充!

“-”,是作為連字符表示的是一個范圍,

如果多帶帶的將“-”符號放在第一位的話,它表示的也是一個普通的字符!例如:[a-z]這個時候就是元字符,代表的是一個范圍!

在[-abc]中,"-"就是一個普通的字符,這句話就表示,匹配-、a、b、c中,這四個字符中的任意一個!

^有兩個意思,

在字符簇外,它表示的是托字節,匹配的是一個位置!

而在字符簇中相當于取反的意思!而且只有當托字節放在字符簇的第一個位置的時候才會表示一個元字符!

    array(5) { [0]=> string(2) "q " [1]=> string(2) "qi"[2]=> string(2) "qr" [3]=> string(2) "qi" [4]=>string(2) "qq" } }
?>
     
可能會有的朋友問Iraq中q后面匹配了什么!答案是回車(在window狀態下是
)!
并不屬于udfg中的任意字符所以匹配成功!
在heredoc的語法中,會完整的保留空格、制表符、回車換行!
②“|”表示或的意思!它代表一個分支語句!
到這里,可能有的朋友會問,那他的功能豈不是和 ”[]” 的功能重復了么?

答案顯然是否定的!個人認為“|”,分支語句,在一定程度上彌補了“[]”符號功能的不足!因為“[]”,自始至終只能表示一個字字符!

例如:[a-z],他表示的匹配a-z中的任意一個字符!

而當我們需要匹配abc或def的時候,顯然”[]”是無能為力的!而此時也正是“|”分支結構的用處!可以寫成(abc|def)

表示匹配abc或者def這兩個字符集中的一個!

③“?”表示可選項!它只作用于之前緊鄰的元素!
這里我們需要明白一下元素的概念!所謂元素還包括如下的形式:[a-z]這個字符簇整體表示一個元素!(abc|def)這個分支結構整體表示一個元素!
注意:所有的量詞都是僅作用于之前緊鄰的元素!
④正則中的反向引用
在正則表達式中,使用”()”包裹起來的元素被統一稱為子表達式!而括號是能夠記憶“()”匹配到的內容的,無論這些匹配到的文本是什么!(這個也就是我們常說的反向引用!如果他是第一個的話使用1,就可以獲得字表達式中的內容!)
那么如果判斷是表達式幾呢?有一個原則:按照開括號“(”從左到右的出現順序進行計算!依次就是1,2,3…… 注意:反向引用應該是可以嵌套的!遵循的同樣是這個原則!看代碼:
 string(8) "maweibin" [1]=> string(8) "maweibin" [2]=> string(5) "mawei" [3]=> string(2) "ma" } 
?>

通過結果,我們可以看到,第一個字表達式是“maweibin”,第二個字表達式是“mawei”,第三個字表達式是“ma”。
⑤正則表達式中的“$”陷阱!

在正則表達式中“$”符號,同托字節“^”一樣是匹配一個位置的!但是“$”符號本身又有一些陷阱需要我們注意!
一般情況下,我們都認為“$”符號匹配就是一行中的最后一個位置!這個并沒有錯,但是不夠詳細!
其實$匹配的是這樣一個位置,匹配n前或單行字串的結束位置,單行字符串結尾什么都沒有!舉例說明:

 array(1) { [0]=>string(14) "your yourselef" } [1]=> array(1) { [0]=> string(4)"your" } }
?>
只有最后一個被匹配到了! 、
原因是這樣的!在window中每換一行會有隱藏字符“ ”存在!
$匹配 前或字串結尾(字符串結尾,比如多帶帶一行的最后), 也是一個字符,且不在[a-zA-Z]范圍!其實,我們只需要將正則改寫為"/^([a-zA-Z]+)s*1[a-zA-Z] s$/m",這里只是加上了一個s*用來匹配r這個看不見的字符串!
⑥關于正則表達在多行匹配中的應用!

正則表達式大多數情況下是進行單行的匹配的!但是,有時候我們也需要進行多行的匹配,特別是在我們進行信息采集的時候,顯得就尤為重要!
個人認為,在php中如果我們能夠靈活的運用php的模式修飾符,那么多行匹配就沒有什么問題了!所以多行匹配,個人認為就是重點對模式修飾符的學習!

(1)m(mutiline),加上了m修飾符號的主要作用是更改了托字節”^”和“$”的應用范圍!
黑色箭頭代表的是托字節”^”所匹配的位置,藍色箭頭是美元符號”%”所匹配的位置! 舉例說明:

從上面,我們可以看出來:在沒有m修飾符的時候,托字節^僅匹配字符串的開始位置,
而$僅匹配字符串的末尾,或者最后的換行符號!
加上了m修飾符之后:

從上面,我們可以看出來:加上m修飾符后,托字節^會匹配目標字符串的開始,或者任意換行符n前面的位置; 而$會匹配目標字符串的最末位置,或者任意換行符后面的位置!
(2)S修飾,如果設置了這個修飾符那么,模式中的元字符 “ . ” 就會匹配所有字符, 包含換行符. 如果沒有這個修飾符, 那么 “ . ”實際上匹配的是除了換行符n外的任意字符!

(3)U(這個是大寫的ungreedy:非貪婪)。

舉例說明:
百度谷歌
正則如下:.*結果是把全部的字符串都匹配到了!其實,我們只需要加上U修飾符,這樣,這樣一旦成功匹配一次的話,正則就不會繼續進行匹配了!

(4)i(個人認為應該是ingnore的意思),表示在匹配的時候忽略大小寫。

⑦最左端文本優先匹配 && 標準的匹配量詞是匹配優先的

好抽象,還是舉個例子吧:

文本:this is March, March1998
正則:March[0-9]+
匹配過程:
1. 正則中的一個字符M從文本對最左面開始嘗試匹配,發現第一個字符是t,并不匹配,換到下一個字符h仍不滿足,于是繼續下一個字符,直到遇到第一個大寫字符M;
2. 正則中第二個字符a, 從M字符后面繼續開始匹配,同樣滿足,于是r字符。就這樣,March單詞在文本中都得到了匹配。直到遇到了[0-9]+
3. 此時,由于標準匹配量詞優先原則,先檢測到了+, 聲明了在接下來對匹配中,前面對字符要嘗試匹配1次到任意對多次
4. 此時,發現 " , " 字符并不滿足數字至少出現一次對需求,所以本輪匹配失敗,接著來吧。
5. 接著字符 " , ", 接著往下匹配M字符不符合空格,接著下一個字符。發現M字符得到了匹配,緊接著a字符 r字符 c字符 h字符。此時接下來要執行的步驟同步驟3一模一樣,這次得到了滿足。



![圖片上傳中...]

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20723.html

相關文章

  • JavaScript:面試頻繁出現的幾個錯點

    摘要:針對于面向對象編程的。因為面向對象就是針對對象例子中的守候來進行執行某些動作。這就是閉包的用途之一延續變量周期。把變量放在閉包里面和放在全局變量里面,影響是一致的。 1.前言 這段時間,金三銀四,很多人面試,很多人分享面試題。在前段時間,我也臨時擔任面試官,為了大概了解面試者的水平,我也寫了一份題目,面試了幾個前端開發者。在這段時間里面,我在學,在寫設計模式的一些知識,想不到的設計模式...

    VincentFF 評論0 收藏0
  • forEach、map、filter、find、sort、some等錯點整理

    摘要:最近手頭上做了一個很大的后臺管理項目,前端對復雜數據的處理要求頗高,也確實讓自己發現了很多之前被忽視的細節。鳴人佐助卡卡西佐助佐助佐助但是很遺憾及更早版本也不支持。 ??最近手頭上做了一個很大的后臺管理項目,前端對復雜數據的處理要求頗高,也確實讓自己發現了很多之前被忽視的細節。在此特整理出來,希望不熟悉的朋友們們以后可以繞開我踩的這些坑。本文初衷在于幫助大家梳理一些數組操作上的重點和易...

    AJie 評論0 收藏0
  • 指針方面相關內容,及其錯點

    摘要:文章目錄前言一丶野指針指針的運算指針整數指針指針指針的關系運算二字符指針三指針數組與數組指針指針數組數組指針四數組名與數組名五數組參數指針參數一維數組傳參二維數組傳參一級指針傳參二級指針傳參六丶函數指針函數指針即指 ...

    linkFly 評論0 收藏0
  • docker命令錯點整理

    摘要:拷貝目錄的話,是拷貝目錄里頭的文件,不包括目錄本身原樣拷貝,不支持遠程文件設置指令只能存在一個,多個的話,執行最后的那一個。設置鏡像的元屬性指定被其他鏡像作為基礎鏡像時運行的操作指令指定確保服務出現任何問題而意外結束時,自動重新啟動。 pause docker pause可以暫時停止容器,以釋放一部分CPU出來給其他服務使用docker unpause可以解凍 docker stop ...

    YacaToy 評論0 收藏0
  • python 一些錯點整理

    摘要:與比較中與比較關鍵字用來在函數或其他局部作用域中使用全局變量。親自動手試后,發現使用了只會讀閉包內的變量,可以隔著多層上一哥們類比看作為步驟 這篇文章是抄抄寫寫得來的,純粹是這個編輯器比筆記的好太多,才在這兒寫。 函數參數傳遞 Python的函數參數傳遞 對于變量(與對象相對的概念),其實,python函數參數傳遞可以理解為就是變量傳值操作,用C++的方式理解,就是對void*賦值。如...

    Lemon_95 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<