正則表達式

一、與Perl語言兼容的正則表達式處理函數

        函數名                  功能描述
preg_match()進行正則表達式匹配
preg_match_all()進行全局正則表達式匹配
preg_replace()進行正則表達式的搜索和替換
preg_split()用正則表達式分割字符串
preg_grep()返回與模式匹配的數組單元
preg_replace_callback()用回調函數執行正則表達式的搜索和替換


二、正則表達式的語法規則

    正則表達式描述了一種字符串匹配的模式,通過這個模式在特定的函數中對字符串進行匹配、查找、替換及分割等操作。正則表達式作爲一個匹配的模板,是由原子(普通字符,例如字符a到z)、有特殊功能的字符(稱爲元字符,例如*、+和?等),以及模式修正符三部分組成的文字模式。一個表單密碼的正則表達式模式如下所示:

$zzpassword='/[a-z,A-Z,0-9,\m]{6,12}/';


1、定界符

    在程序語言中,使用與Perl兼容的正則表達式,通常都需要將模式表達式放入定界符之間。作爲定界的字符也不僅僅侷限於使用斜線“/”。除了字母、數字和反斜線“\”以外的任何字符都可以作爲定界符號,例如# ! {} |等都是可以的。通常習慣將模式表達式包含在兩個斜線/之間。


2、原子

   原子是正則表達式的最基本的組成單位,而且在每個模式中最少要包含一個原子。

   (1)普通字符作爲原子

   普通字符是編寫正則表達式時最常見的原子了,包括所有的大寫和小寫字母字符、所有數字等。例如a-z、A-Z、0-9.

   (2)一些特殊字符和元字符作爲原子

   任何一個符號都可以作爲原子使用,但如果這個符號在正則表達式中有一些特殊意義,我們就必須使用轉義字符“\”取消它的特殊意義,將其變成一個普通的原子。例如,所有的標點符號以及一些其他的符號,雙引號、單引號、* + .等,如果當原子,就必須像這樣\" \' \* \+ \.這樣使用。

   (3)一些非打印字符作爲原子

   所謂的非打印字符,是一些在字符串中的格式控制符號,例如空格、回車及製表符號等。

正則表達式中常用的非打印字符



原子字符                            含義描述
\cx匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須爲A-Z或a-z之一,否則,將c視爲一個原義的c字符
\f匹配一個換頁符。等價於\xOc和\cL
\n匹配一個換行符。等價於\xOa和\cJ
\r匹配一個回車符。等價於\xOd和\cM
\t匹配一個製表符。等價於\xO9和\cI
\v匹配一個垂直製表符。等價於\xOb和\cK



'/\n/'          //在Windows系統中用於匹配字符串中是否有回車換行出現

'/\r\n/'        //在Linux系統中用於匹配字符串中是否有回車換行出現


3、元字符

   利用Perl正則表達式還可以做另一件有用的事,就是使用各種元字符來搜索匹配。所謂元字符就是構建正則表達式的具有特殊含義的字符,如* + ?等。在一個正則表達式中,元字符不能單獨出現,它必須是用來修飾原子的。如果要在正則表達式中包含元字符本身,使其失去特殊的含義,則必須在其前面加上\進行轉義。

正則表達式的元字符


     元字符          含義描述
*匹配0次、1次或多次其前的原子
+匹配1次或多次其前的原子
?匹配0次、或1次其前的原子
.匹配除了換行符外的任意一個字符
|匹配兩個或多個分支選擇
{n}表示其前面的原子恰好出現n次
{n,}表示其前面的原子出現不少於n次
{n.m}表示其前面的原子至少出現n次,最多出現m次
^或\A匹配輸入字符串的開始位置(或在多行模式下行的開頭,即緊隨一換行符之後)
$或\Z匹配輸入字符串的結束位置(或在多行模式下行的開頭,即緊隨一換行符之前)
\b匹配單詞的邊界
\B匹配除單詞邊界以外的部分
[]匹配方括號中指定的任意一個原子
[^]匹配除方括號中的原子以外的任意一個原子
O匹配其整體爲一個原子,即模式單元,可以理解爲由多個單個原子組成的大原子


4、模式修正符

   模式修正符在正則表達式定界符之外使用(最後一個斜線/之後)。

模式修正符號

模式修正符號
i在和模式進行匹配時不區分大小寫
m將字符串視爲多行。默認的正則表達式開始^和結束$將目標字符串作爲單一的一“行”字符(甚至其中包含有換行符也是如此)。如果在修正符中加上“m”,那麼開始和結束將會指字符串的每一行,每一行的開頭就是^,結束就是$
s如果設定了次修正符,模式中的圓點元字符“.”匹配所有的字符,包括換行符。即將字符串視爲單行,換行符最爲普通字符看待。
x模式中的空白忽略不計,除非它已經被轉義
e只用在preg_replace()函數中,在替換字符串中對逆向引用做正常的替換,將其作爲PHP代碼求值,並用其結果來替換所搜索的字符串。
U本修正符反轉了匹配數量的值使其不是默認的重複,而變成在後面跟上“?”才變得重複。這和Perl不兼容。也可已通過在模式之中設置修正符“U”後者在數量符之後跟一個問號來用此選項。
D模式中的美元元字符僅匹配目標字符串的結尾。沒有此選項時,如果最後一個字符是換行符的話,美元符號也會匹配此字符之前。如果設定了m修正符則忽略此選項。

例如:模式“/Web Server/ix”可以用來匹配字符串“webServer”,忽略大小寫和空白。


三、與Perl兼容的正則表達式函數

   正則表達式不能單獨使用,必須在相應的正則表達式函數中應用,才能實現對字符串的匹配、查找、替換及分割等操作。

1、字符串的匹配和查找

   (1)preg_match()函數

    該函數常用於表單驗證

   (2)preg_match_all()函數

   (3)preg_grep()函數

2、字符串的替換

   (1)preg_replace()函數

   (1)str_replace()函數

3、字符串的分割和連接 

   (1)preg_split()函數

   (1)explode()函數

   (1)implode()函數


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章