PHP 入门 - 4.正则表达式
生活随笔
收集整理的這篇文章主要介紹了
PHP 入门 - 4.正则表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 基礎
- 錨
- 字符類
- 選擇性
- 重復序列
- 子模式
- 量詞和貪婪
- 逆向引用
- 后綴選項
- 正則表達式的相關函數
- 匹配
- 替換
- 拆分
- 使用正則表達式過濾數組
- 引用正則表達式
基礎
. : 匹配任意單個字符
var_dump(preg_match("/c.t/", "cat")); // true var_dump(preg_match("/c.t/", "c t")); // true var_dump(preg_match("/c.t/", "b t")); // false var_dump(preg_match("/c.t/", "ct")); // false匹配特殊字符(元字符)要使用反斜杠進行轉義
var_dump(preg_match("/\\$5\\.00/", "Your bill is $5.00 exactly")); // true var_dump(preg_match("/$5.00/", "Your bill is $5.00 exactly")); // false正則表達式中,有三種基本的抽象模式:
- 在字符串中可以出現的字符集(字母、數字和特殊的標點符號)
- 可選擇的字符串集合(例如“com”、“edu”、“net”)
- 在字符串中重復的序列(至少一個但是不多于5個數字字符)
錨
錨( anchor )將匹配限制在字符串中的特定位置(錨不匹配目標字符串中的實際字符)
| ^ | 字符串開始 |
| $ | 字符串結尾 |
| [[:<:]] | 單詞開始 |
| [[:>:]] | 單詞結尾 |
| \b | 單詞邊界(\w和\W之間或者字符串的開頭、結尾) |
| \B | 非單詞邊界(\w\w之間或者\W\W之間) |
| \A | 字符串開始 |
| \Z | 字符串結尾,或者換行符 \n 之前 |
| \z | 字符串結尾 |
| ^ | 一行的開頭(如果/m標簽生效,換行符\n后面) |
| $ | 一行的結尾(如果/m標簽生效,換行符\n前面) |
^ : 匹配到字符串的開頭
preg_match("/^cow/", "Dave was a cowhand"); // false preg_match("/^cow/", "cowabunga"); // true$ : 匹配到字符串的結尾
var_dump(preg_match("/cow$/", "Dave was a cowhand")); // false var_dump(preg_match("/cow$/", "Don't have a cow")); // true字符類
通過中括號包含可接受的字符類
| [:alnum:] | 字母和數字字符 | [0-9a-zA-Z] |
| [:alpha:] | 字母字符 | [a-zA-Z] |
| [:ascii:] | 7位的 ASCII 碼 | [\x01-\x7F] |
| [:black:] | 水平空白符 | [ \t] |
| [:cntrl:] | 控制字符 | [\x01-\x1F] |
| [:digit:] | 數字 | [0-9] |
| [:graph:] | 用墨水打印的字符 | [^\x01-\x20] |
| [:lower:] | 小寫字母 | [a-z] |
| [:print:] | 可打印的字符(圖形類、空格和制表符) | [\t\x20-\xFF] |
| [:punct:] | 任意標點符號 | [-!"#$%’()*+,./:;<=>?@[\]_{|}~] |
| [:space:] | 空白字符 | [\n\r\t \x0B] |
| [:upper:] | 大寫字母 | [A-Z] |
| [:xdigit:] | 十六進制數 | [0-9a-fA-F] |
| \s | 空白 | [\r\n \t] |
| \S | 非空白 | [^\r\n \t] |
| \w | 單詞字符 | [0-9a-zA-Z_] |
| \W | 非單詞字符 | [^0-9a-zA-Z_] |
| \d | 數字 | [0-9] |
| \D | 非數字 | [^0-9] |
選擇性
使用豎線( | )字符在正則表達式中指定可選擇的部分
var_dump(preg_match("/^([a-z]|[0-9])/", "The quick brown fox")); // false var_dump(preg_match("/^([a-z]|[0-9])/", "jumped over`")); // true重復序列
| ? | 0 次或 1 次 |
| * | 0 次或多次 |
| + | 1 次或多次 |
| { n } | 出現 n 了 |
| { n , m } | 最少 n 次,不超過 m 次 |
| { n , } | 最少 n 次 |
子模式
使用小括號把正則表達式組合在一起,作為一個單獨的單元來處理。可以指定第三個參數傳遞給匹配函數,第三個參數將會被返回一個數組。數組第 0 個元素設置為匹配的整個字符串,第一個元素是與子模式匹配的第一個子字符串,第二個元素是與子模式匹配的第二個子字符串,以此類推。
如果你不想捕獲匹配到的文本,可以用(?:subpattern)的結構來實現
preg_match("/([0-9]+)([a-z]+)/", "1234yii", $good); var_dump($good[1]); // 1234 var_dump($good[2]); // yii preg_match("/(?:[0-9]+)([a-z]+)/", "1234yii", $good); var_dump($good[1]); // yii量詞和貪婪
正則表達式中的量詞是貪婪的,所以提供了一種模式來使得量詞支持最少匹配模式。
| ? | ?? |
| * | *? |
| + | +? |
| { n } | { n }? |
| { n , } | { n , }? |
| { n , m } | { n , m }? |
逆向引用
使用逆向引用 \1 ,來引用某個模式里面匹配到的第一個文本,\2 來引用第二個,以此類推。
preg_match("/([[:alpha:]]+)\s+\\1/", "Paris in the the spting", $good); // 這里的\\1 就相當于 ([[:alpha:]]+) var_dump($good); // 結果返回如下 array(2) {[0]=>string(7) "the the"[1]=>string(3) "the" }后綴選項
正則表達式允許你把字符放在正則表達式的后面,從而改變表達式的解析、行為或者匹配方式。
| /regexp/i | 匹配大小寫 |
| /regexp/s | 使句點匹配任何字符,包括換行符\n |
| /regexp/x | 去掉空白和注釋 |
| /regexp/m | 使得( ^ )匹配換行符\n之后的內容,( $ ) 匹配換行符\n之前的內容 |
| /regexp/e | 如果替換字符串是 PHP 代碼,使用 eval() 執行該代碼,得到實際替換的字符串 |
| /regexp/U | 顛倒子模式的貪婪性。* 和 + 盡可能少地匹配而不是盡可能多 |
| /regexp/u | 把模式字符串當作 UTF-8 編碼 |
| /regexp/X | 如果一個反斜杠之后跟著沒有特殊意義的字符,則產生一個錯誤 |
| /regexp/A | 把錨定位在字符串的開頭就像模式中由 ^ 一樣 |
| /regexp/D | 使 $ 字符僅匹配一行的末尾 |
| /regexp/S | 使表達式解析器更小心地檢查模式的結構,使得第二次運行時(如在一個循環中),加快速度 |
除了在模式結束分隔符之后指定模式選項之外,還可以在一個模式內部指定僅運行于部分模式的選項。語法為:(?flags:subpattern)
var_dump(preg_match("/I like (?ix:ph p)/", "I like pHp")); // true正則表達式的相關函數
匹配
- preg_match(pattern, string[, &matches]):int : 搜索 string 與 pattern 給定的正則表達式的一個匹配。如果提供 matches 參數,它將被填充為搜索結果,$matches[0] 將包含完整模式匹配到的文本,$matches[1] 將包含第一個捕獲子模式匹配到的文本,以此類推。
- perg_match_all() : 與 preg_match() 參數相同,不同的是 preg_match() 在第一次匹配后停止搜索,preg_match_all() 會一直搜索到結尾。
替換
- preg_replace(pattern, replacement, subject[, limit = -1]):mixed : 搜索 subject 中匹配 pattern 的部分,以 replacement 進行替換。limit : 每個模式在每個 subject 上進行替換的最大次數。默認是 -1 (無限)。
- preg_replace_callback(pattern, callable, subject[, limit = -1]):mixed : 與 preg_replace() 不同的是,可以指定一個 callback 替代 replacement 進行替換字符串的計算。
拆分
- preg_split(pattern, subject[, limit=-1[, flags=0]]):array : 通過一個正則表達式 pattern 分割字符串 subject。
使用正則表達式過濾數組
- preg_grep(pattern, array[, flags=0]):array : 返回給定數組 array 中模式 pattern 匹配的元素組成的數組。
引用正則表達式
- preg_quote(string[, delimiter=NULL]):string : 返回字符串 string 的正則表達式。注意:默認不會轉義 /,需指定第二個參數為 / 才可以被轉義。
感謝你看到了這里。如果文章有錯誤,請評論指正,謝謝!
總結
以上是生活随笔為你收集整理的PHP 入门 - 4.正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 入门 - 3.字符串
- 下一篇: PHP 入门 - 5.数组