程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP正則表達式語法簡介

PHP正則表達式語法簡介

編輯:PHP基礎知識
 

正則表達式是個最最令人頭疼的東西,每次寫每次查,記憶時間過不超過三分鐘(可能還是多說的),正則表達式也有幾種標准,posix和perl標准等。正則表達式不只在Perl、Python、Bash、JAVA等語言中使用,通過擴展或升級,幾乎所有語言都會涉及,但是格式和標准未必相同,所以一切以測試為准。目前PHP支持以上兩種正則表達式。

一、PHP正則基礎規則

PCRE規定正則表達式需要使用定界符(/)。所有的語句均寫在定界符內,主要“段型”(天緣自己叫法)規則如下:

  • 開頭的 ^ 和結尾的 $ 讓PHP從字符串開頭檢查到結尾。
  • [ 跟 ] 組合用來限制許可輸入類型。連續的數字或字母可以用“–”符號連接,如[A-Z] 表示匹配A至Z所有字母,[0-5]表示0-5所有數字,[a-z] 表示a到z所有小寫字母,等等。
  • { 跟 }組合用來限制小節重復次數,比如 {5,15} 表示前面段可以重復 5-15 次。
  • ( 跟 ) 組合用來合並小節,定義字符串中必須存在的字符或字符串,比如(hello|world)可以匹配hello或world。
  • (.) 將匹配所有字符,而 [.] 只匹配 "." 本身。

如下符號,如需匹配本身,必須在其前面增加一個轉義字符 \,這些字符包括:

( ) [ ] . * ? + ^ | $ \ /

比如\[表示匹配[符號,\\表示匹配一個反斜槓,以此類推。

二、常用元字符

/ 定界符

^ 匹配字符串的開始

$ 匹配字符串的結束

. 匹配除換行符意外的任意字符

? 零或一個緊接前的字符

* 零或多個緊接前的字符

+ 一或多個緊接前的字符

\w 匹配字母或數字或下劃線

\s 匹配任意的空白符,所謂空白字符是指:空格、制表符、換頁符等

\d 匹配數字

\b 匹配單詞的開始或結束

\W \w的反義,即匹配任意非字母,數字,下劃線和漢字的字符

\S \s的反義,即匹配任意非空白符的字符

\D \d的反義,即匹配任意非數字的字符

\B \b的反義,即不是單詞開頭或結束的位置

[x] 匹配x字符,如,[a-z] 所有小寫字母,[A-Z] 所有大寫字母,[0-9] 所有數字

[^x] 匹配除了 x 之外的任意字符,如 [^abc] 匹配除了 abc 這幾個字母之外的任意字符

{3} 3個緊接前的字符

{5,15} 5-15個緊接前的字符

(red|green|blue) Red 或 green 或 blue

三、正則表達用法歸納

天 緣自己總結了一下,正則表達式用途大概有三:

  • 正則替換 —— 替換符合某個規則下的字符串
  • 正則提取 —— 提取符合某個規則的字符串,這時小節“( )”的用法就尤為重要。
  • 正則驗證 —— 驗證是否符合某個規則,比如位數驗證,類型驗證、序列合法驗證等。

1、正則替換例子:

$str = '/*ddd*/sss';

preg_replace('[(/*)+.+(*/)]', '', $str);

print_r($str);

這段代碼可以替換所有以/*開頭並以*/結束的部分為空,也就是批量去除注釋。

2、正則提取例子:

$str = '/username/';

preg_match("/^(\/)([^\/.]+)(\/)/",$str,$Arr);

print_r($Arr);

該段代碼可以提取$str中的username部分,結果在$Arr[2]中。打印$Arr輸出如下:

Array ( [0] => /username/ [1] => / [2] => username [3] => / )

preg_split 可以將整段字符串按匹配到的正則表達式分割成 1、2或更多字符的多段。比如獲取標簽,無論是用空格還是逗號分隔的:

$tags = preg_split('/[,]/', 'my,tags,unevenly,spaced');
print_r($tags);

3、正則驗證例子:

這個用的最多了,比如驗證密碼:

preg_match( "/^\d*$/",$str);

這句話匹配$str是否全是數字。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved