日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP 入门 - 4.正则表达式

發布時間:2024/1/17 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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("/c[aeiou]t/", "I cut my hand")); // true var_dump(preg_match("/c[aeiou]t/", "What cart")); // false 中間由兩個字符 var_dump(preg_match("/c[aeiou]t/", "14ct gold")); // false 中間沒有字符 //在字符類開頭使用 ^ 來否定這個字符類 var_dump(preg_match("/c[^aeiou]t/", "I cut my hand")); // false //用連接符( - )定義一個字符范圍 var_dump(preg_match("/[0-9]%/", "25%")); // true var_dump(preg_match("/[a-zA-Z]!/", "stop!")); // true var_dump(preg_match("/[a-zA-Z]!/", "stop")); // false

選擇性

使用豎線( | )字符在正則表達式中指定可選擇的部分

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 次
var_dump(preg_match("/ca+t/", "caaaaaaaaaat")); // true

子模式

使用小括號把正則表達式組合在一起,作為一個單獨的單元來處理。可以指定第三個參數傳遞給匹配函數,第三個參數將會被返回一個數組。數組第 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 }?
var_dump(preg_match("/(<.*>)/", "do <b>not</b> press the button", $match)); var_dump($match[1]); // <b>not</b> var_dump(preg_match("/(<.*?>)/", "do <b>not</b> press the button", $match)); var_dump($match[1]); // <b>

逆向引用

使用逆向引用 \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使表達式解析器更小心地檢查模式的結構,使得第二次運行時(如在一個循環中),加快速度
$message = <<< END To: you@youcorp From: me@mecorp Subject: pay uppay me or else! END; var_dump(preg_match("/^subject: (.*)/im", $message, $good)); // true var_dump($good[1]); // pay up

除了在模式結束分隔符之后指定模式選項之外,還可以在一個模式內部指定僅運行于部分模式的選項。語法為:(?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.正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。