# 正則表達式的語法規則
>[success]正則表達式由兩部分構成:元字符和文本字符。
【元字符】是具有特殊含義的字符
【文本字符】就是普通的文本,如數字和字母
需要注意的是:PCRE風格的正則表達式一般都放置在定界符“/”之間,下面一一詳細講解。
## 定界符和修飾符
### 定界符
>[info] POSIX兼容正則表達式沒有定界符,函數的相應參數會被認為是正則。
PERL兼容的正則表達式可以使用任不是字母、數字或反斜線(\)的字符作為定界符,如果作為定界符必須被用在表達式本身中,則需要用反斜線轉義。在大多數使用
>[info]PCRE正則表達式的代碼中,定界符都使用一個“/”,可在引號內表達的開始和結尾處看到,必須要記住,定界符并非表達式的一部分。也可以使用()、{}、[]和<>作為定界符。
### 修飾符
>[info]POSIX兼容正則表達式沒有修飾符
>[info]PERL兼容正則表達式中可能使用的修飾符(修飾符中的空格和換行被忽略,其他字符會導致錯誤),在PCRE表達式的最后一個定界符之后,可以添加一個修飾符來更改正則表達式的行為。修飾符的種類如下。
(1)i(PCRE_CASELESS):忽略大小寫
(2)(PCRE_MULTILINE):設定此修飾符,會將一個字符串視為多行,行起始(^)和行結束($)除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符(\n);若無此修飾符,則不包括換行符。
(3)s(PCRE_DOTALL):當設定此修飾,模式中的圓點(.)匹配所有的字符,包括換行符(\n);若無些修飾符,則不包括找行符。
(4)x(PCRE_EXTENDED):當設定此修飾符,將模式中的空白字符(除了被轉義的完全刪除忽略)。
(5)e:如果設定了此修飾符,preg_replace()函數將在替換字符串中逆向引用做正常 使用此修飾符,其他PCRE函數將忽略之。
(6)A(PCRE_ANCHORED):如果設定了此修飾符,模式將被強制為“anchored”,即強制僅從目標字符串的開頭開始匹配。
(7)D(PCRE_DOLLAR_ENDONLY):如果設定了此修飾符,模式中的行結束($)僅匹配目標字符串的結尾.沒有此選 項時,如果最后一個字符是換行符的話,也會被匹配在里面。如果設定了m修飾符,則忽略此選項。
(8)S:當一個模式將被使用若干次時,為加速匹配得先對其進行分析。如果設定了此修飾符,則會進行額外的分析。目前,分析一個模式僅對沒有單一固定起始字符的non-anchored模式有用。
(9)U(PCRE_UNGREEDY):使用“?”的默認匹配成貪婪狀態的
(10)X(PCRE_EXTRA):模式中的任何反斜線后面跟上一個沒有特殊意義的字母將會被導致錯誤,從而保留此組合以備將來擴充。默認情況下,一個反斜線后面跟一個沒有特殊意義的字母被當作該字母本身。
(11)u(PCRE_UTF8)模式字符串被當成UTF-8。
## 邏輯區隔
>[success]關于邏輯區隔,POSIX兼容的正則表達式和PERL兼容的正則表達式的邏輯區隔符號的作用和使用方法完全一致。
>[info][]:包含任選一個操作的相關信息
{}:包含匹配次數的相關信息
():包含一個邏輯區間的相關信息,可被用來進行引用操作。
|:表示“或”,[ab]和a|b是等價的
## 元字符與“[]”相關
>[success]有兩組不同的元字符:一種是模式中除了方括號內都被識別的,另一個是在方括號“[]”內被識別
>[info](1)POSIX兼容的正則表達式和PERL兼容的正則表達式“[]”之外相同的元字符如下。
\:有數釧用途的通用轉義符
^:匹配字符串的開頭
$:匹配字符串的結尾
?:區配0或者1
*: 匹配0個或1個前面指定類型的字符
+:匹配1個或者多個前面指定類型的字符
>[info](2)POSIX兼容的正則表達式和PERL兼容的正則表達式"[]"之外不相同的元字符如下:
PERL兼容的正則表達式匹配除了換行符外的任意一個字符;
POSIX兼容的正則表達式匹配任意一個字符。
>[info](3)POSIX兼容的正則表達式和PERL兼容正則表達式“[]”之內相同元字符如下:
\:有數種用途的通用轉義符。
^:取反字符,但僅當其為第一個字符時有效。
-:指定字符ASCII范圍,仔細研究ASCII碼,你會發現[W-c]等價于[WXYZ\\^_\\abc]
>[info](4)POSIX兼容的正則表達式和PERL兼容的正則表達式“[]”之內不相同的元字符如下:
POSIX兼容的正則表達式中中[a-c-e]的指定會拋出錯誤
PERL兼容的正則表達中[a-c-e]的指定等價于[a-e]
## 匹配次數與“{}”相關
>[info] POSIX兼容的正則表達式和PERL兼容的正則表達式在匹配次數方面完全 一致!
{2}:表示匹配前面的字符兩次
{2,}:表示匹配前面的字符兩次或者多次,默認都是貪婪(盡可能多的匹配)
{2,4}:表示匹配前面的字符兩次,三次或者4次
## 邏輯區間與“()”相關
>[info]使用()包含起來的區域是一個邏輯區間,邏輯區間的主要作用是體現一些字符出現的邏輯次序,另一個用處就晃可以用來引用(可以將此區間內的值引用給一個變量)。后一個作用比較奇特,請看下面的實例。
> ### 實例 與()相關的邏輯區間
>~~~
><?php
>$str="http://www.163.com";
>//POSIX兼容正則
>echo ereg_replace("(.+)", "<a href=\\1>\\1</a>",$str);
>echo "<br />";
>//PERL兼容正則:
>echo ereg_replace("/(.+)/", "<a href =$1>$1</a>",$str);
>//顯示兩個連接
>?>
>~~~
>[danger]在引用的時侯,括號是可以嵌套的,邏輯次序是按照“(”出現的次序來標定的。
## 類型匹配
>[info] PHP正則表達式中有一些內置的通用字符簇,用于指定字符的處理范圍。下面首先介紹POSIX兼容的正則表達式的類型匹配
[:upper:]:匹配所有的大寫字母,和[A-Z]意義相同
[:lower:]:匹配所有的大寫字母,和[a-z]意義相同
[:alpha:]:匹配所有的大小寫字母,和[A-Za-z]意義相同
[:alnum:]:匹配所有的字母和數字,和[A-Za-z0-9]意義相同
[:digit:]:匹配所有的數字,和[0-9]意義相同
[:xdigit:]:匹配所有的十六進制字符,和[0-9A-Fa-f]意義相同
[:punct:]:匹配所有的標點符號,和[.,"'?!;:]意義相同
[:blank:]:匹配空格和TAB,和[\t]意義相同。
[:space:]:匹配所有的空白字符,和[\t\n\r\f\v]意義相同
[:cntrl:]:匹配所有的ASCII0~31之間的控制字符,包括TAB、退格符和"\"反斜線。
[:graph:]:匹配所有的可打印字符,和[^\t\n\r\f\v]意義相同
[:print:]:匹配所有的可打印字符和空格,和[^\t\n\r\f\v]意義相同
[:<:]:匹配單詞的開始
[:>:]:匹配單詞的結尾
>[info]PERL兼容的正則表達式的類型匹配如下,這些是POSIX所不支持的。
\a:alarm,即BEL字符('0)
\cx:"control-x",其中x是任意字符
\e:escape('0B)
\f:換頁符 formfeed('0C)
\n:換行符 newline('0A)
\r:回車符 carriage return('0D)
\t:制表符tab('0)
\xhh:十六進制代碼為hh的字符
\ddd:八進制代碼為ddd的字符,或backreference
\d:任意十制數字
\D:任意非十進制數的字符
\s:任意空白字符
\S:任意非空白字符
\w:任意”字“的字符
\W:任意”非字“的字符
\b:字分界線
\B:非字分界線
\A:目標的開頭(獨立于多行模式)
\Z:目標的結尾或位于結尾的換行符前(獨立于多行模式)
\z:目標結尾(獨立于多行模式)
\G:目標中的第一個區配位置
- 前言
- PHP獲取服務器信息
- PHP中的常用函數-新手必備知識
- 日期時間相關的函數
- 時區設置
- time函數
- strtotime 時間戳
- date函數
- mktime函數
- 聯合使用 date() 和 mktime()
- PHP數據類型相關的函數
- PHP數組相關的函數
- array函數
- 數組的排序
- sort()和rsort()函數
- asort()和arsort()函數
- ksort()和krsort()函數
- array_multisort()函數
- array_reverse函數
- 數組的遍歷
- 數組中新增和刪除元素
- 數組頭部插入和刪除元素
- 數組尾部插入和刪除元素
- 刪除數組中重復的元素
- 刪除數組中指定的元素
- 數組的合并
- 隨機/打亂已知數組
- range函數
- 數組去除重復
- PHP常用功能函數
- URL地址處理函數
- post/get請求
- PHP字符串相關的函數
- PHP文件系統
- PHP正則表達式
- 正則表達式語法規則
- POSIX擴展的正則表達式函數
- 查找字串函數
- 替換字符串函數
- Perl兼容的正則表達式函數
- PHP中類的應用
- 中文編碼
- 關于stdClass
- 變量相關函數
- unset
- PHP數值相關的函數
- 數值取整
- 開發工具與開發環境使用技巧
- sublime
- 常用插件
- Atom
- 常用插件
- 常見問題
- Visual Studio Code
- vscode常用插件
- 編程推薦字體
- MAC下開發常識
- MAC下的常用設置
- MAC下的常用開發工具
- MAC下XAMMP的常見問題
- Apache配置基礎
- PhpStrom
- php中的常見問題
- 文件上傳相關問題
- API接口中常見問題
- 關于緩沖區問題
- PHP中注意事項
- 條件判斷
- PHP文件管理模塊
- 文件管理源碼
- 文件管理的常用函數
- 文件管理中文亂碼處理
- 自定義功能函數
- 文件下載
- PHP常用頭信息定義匯總
- 常見PHP網頁木馬
- 加密算法
- 1. Base58可逆加密
- 2. AES加密/解密
- mysql數據庫操作
- 命令行操作Mysql常用令行-查詢
- 命令行操作Mysql常用令行-操作
- Mysql使用中的技巧
- 在線數據庫管理中常用命令
- sql show命令
- mysql數據庫的備份與恢復
- 二進制日志介紹
- 二進制日志常用命令
- ThinkPHP
- 數據遷移
- 常見問題
- 驗證碼問題
- API接口中的異常處理
- API接口安全
- 解決跨域問題
- 自定義實用功能函數