這篇文章介紹的內容是關於php的正規表示式,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
正規表示式是一種描述字串結果的語法規則,是一個特定的格式化模式,可以匹配、替換、截取匹配的字串。常用的語言基本上都有正規表示式,如JavaScript、java等。其實,只有了解一種語言的正規使用,其他語言的正則使用起來,就相對簡單些。好了,開始寫正規了。
相關推薦:
1. 正規表示式語法教學(含線上測試工具)
2. PHP正規表示式極速入門影片教學
正規表示式在符合字串時,遵循以下2個基本原則:
1.最左原則:正規表示式總是從目標字串的最左側開始,依序匹配,直到匹配到符合表達式要求的部分,或直到匹配目標字串的結束。
2.最長原則:對於符合的目標字串,正規表示式總是會符合到符合正規表示式要求的最長的部分;即貪婪模式
$str = 'http://baidu.com'; $pattern = '/http:\/\/.*com/';//需要转义/ preg_match($pattern,$str,$match); var_dump( $match);
$str = 'http://baidu.com'; $pattern = '#http://.*com#';//不需要转义/ preg_match($pattern,$str,$match); var_dump( $match);知道開始和結尾的寫法了,接下來就是中間的判斷了。正規表示式是自左向右的順序使用原子和元字元進行拼接。 例如'a4b561c25d9afb9ac8dc4d70affff419zxcv0d36329ec37a2cc24d42c7229b69747a',進行配對時,‘/a4b561c25d9afb9ac8dc4d70affff419.*ff5ce9b4edd32c649942decae47f914a/’,其中.*代表zxcv 。
那麼通用原子和元字元有哪些呢?#
• \d符合一個數字字元。等價於 [0-9]。
• \D#符合一個非數字字元。等價於 [^0-9]。
• \f符合一個換頁符號。等價於 \x0c 和 \cL。
• \n符合一個換行符號。等價於 \x0a 和 \cJ。
• \r符合一個回車符號。等價於 \x0d 和 \cM。
• \s符合任何空白字符,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
• \S符合任何非空白字元。等價於 [^ \f\n\r\t\v]。
• \t符合一個製表符。等價於 \x09 和 \cI。
• \v符合一個垂直製表符。等價於 \x0b 和 \cK。
• \w符合包含底線的任何單字字元。等價於’[A-Za-z0-9_]’。
• \W符合任何非單字字元。等價於 ‘[^A-Za-z0-9_]’。
• \xn符合 n,其中 n 為十六進位轉義值。十六進制轉義值必須為確定的兩個數字長。例如,’\x41’ 符合 “A”。 ’\x041’ 則等價於 ‘\x04’ & “1”。正規表示式中可以使用 ASCII 編碼。
• \nm標識一個八進位轉義值或一個向後引用。如果 \nm 之前至少有 nm 個獲得子表達式,則 nm 為向後引用。如果 \nm 之前至少有 n 個獲取,則 n 為一個後接文字 m 的向後引用。如果前面的條件都不滿足,若 n 和 m 均為八進位數字 (0-7),則 • \nm 將符合八進位轉義值 nm。
• \nml若n 為八進位數字(0-3),且m 和l 均為八進位數字(0-7),則匹配八進制轉義值nml。
• \un十六進位數字表示的 Unicode 字元。例如, \u00A9 符合版權符號(?)。
• . 符合「\n」以外的任何單一字元
• ^ 符合輸入字串的開始位置。在字元域[]中表示取反,如'[^\w]'等於'\w';而^\w表示以單字字元開頭。
• $ 符合輸入字串的結束位置。例'\w$'表示以單字字元結尾。
• ? 符合前面的子表達式零次或一次 等價於 {0,1},例如,"do(es)?" 可以符合 "do" 或 "does"。
• * 符合前面的子運算式零次或多次,等價於{0,}。例如,zo* 能匹配 "z" 、 "zo"、'zoo'。
• 配對前面的子運算式一次或多次,等價於{1,}例如,'zo ' 能符合 "zo" 以及 "zoo"。
• {n} n 為非負整數,配對所確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 或‘Booob’,但是能匹配 "food" 中的兩個 o。
• {n,} n 為非負整數。至少匹配n 次。例如,'o{2,}' 不能符合 "Bob" 中的 'o',但能符合 "foooood" 中的所有 o。 'o{1,}' 等價於 'o '。 'o{0,}' 則等價於 'o*'。
• {n,m} m 和 n 皆為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將符合 "fooooood" 中的前三個 o。 'o{0,1}' 等價於 'o?'。請注意逗號和兩個數字之間不能有空格。
• [] 字元集合(字元域)。匹配所包含的任意一個字元。例如, '[abc]' 可以符合 "plain" 中的 'a'。
• () 符合 ()內的內容 並取得此符合。搭配\n(n為大於1的整數),'http://baidu.com'若表達式:'(\w ) (:)\/\/.*\1'則符合'http://baidu .comhttp',\1表示http。
• (?:) 匹 配 但不取得配對結果,不進行儲存以供日後使用。這在使用 "或" 字元 (|) 來組合一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是比 'industry|industries' 更簡單的表達式。上面表達式若改為'(?:\w )(:)\/\/.*\1',則\1表示為:
• | x|y,匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
• [-] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
• (?=pattern)正 向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹 配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹 配的搜索,而不是从包含预查的字符之后开始。
• (?!pattern)负 向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不 需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜 索,而不是从包含预查的字符之后开始
有时候最后定界符会有一个字母,如‘/as.*/i’,那这个i又是什么呢,这就是模式修正符;
i表示在和模式进行匹配进不区分大小写
m将模式视为多行,使用^和$表示任何一行都可以以正则表达式开始或结束
s如果没有使用这个模式修正符号,元字符中的"."默认不能表示换行符号,将字符串视为单行
x表示模式中的空白忽略不计
e正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用(讲这个函数时再说)
A以模式字符串开头,相当于元字符^
Z以模式字符串结尾,相当于元字符$
U正则表达式的特点:就是比较“贪婪”,使用该模式修正符可以取消贪婪模式
例:
$str = 'asddadsdasd'; $pattern = '/a.*d/'; preg_match($pattern,$str,$match); var_dump($match) ;//asddadsdasd; $str = 'asddadsdasd'; $pattern = '/a.*d/U';//$pattern = '/a.*?d/'; preg_match($pattern,$str,$match); var_dump($match) ;//asd
php常用正则函数;
匹配:preg_match()与preg_match_all()
1 preg_match($pattern,$subject,[array &$matches])
2 preg_match_all($pattern,$subject,array &$matches)
1只会匹配一次,2会把所有符合的字符串都匹配出来,并且放置到matches数组中,而且这两个函数都有一个整形的返回 值。1是一维数组,2是二维数组
替换:preg_replace()
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换。
相关推荐:
以上是php的正規表示式的詳細內容。更多資訊請關注PHP中文網其他相關文章!