PHP中的正規表示式(一)
Hunte 2000年4月14日
PHP繼承*NIX的一貫傳統,完全支援正規表達式的處理。正規表達式提供了一種高級的,但不直觀的字串匹配和處理的方法。用過PERL的正規表達式的朋友都知道,正規表達式的功能非常強大,但學起來不是那麼容易。
例如:
^. @. \.. $
這段有效卻難以理解的程式碼足夠使一些程式設計師頭痛(我就是)或讓他們放棄使用正規表達式。相信當你讀完這個教學後,就可以理解這段程式碼的意思了。
基本模式匹配
一切從最基本的開始。模式,是正規表達式最基本的元素,它們是一組描述字串特徵的字元。模式可以很簡單,由普通的字串組成,也可以非常複雜,往往用特殊的字元表示一個範圍內的字元、重複出現,或表示上下文。例如:
^once
這個模式包含一個特殊的字元^,表示該模式只符合那些以once開頭的字串。例如該模式與字串"once upon a time"匹配,與"There once was a man from NewYork"不匹配。正如如^符號表示開頭一樣,$符號用來匹配那些以給定模式結尾的字串。
bucket$
這個模式與"Who kept all of this cash in a bucket"匹配,與"buckets"不匹配。字元^和$同時使用時,表示精確匹配(字串與模式一樣)。例如:
^bucket$
只符合字串"bucket"。如果一個模式不包括^和$,那麼它與任何包含該模式的字串相符。例如:模式
once
與字串
There once was a man from NewYork
Who kept all of his cash in a bucket.
是配對的。
在該模式中的字母(o-n-c-e)是字面的字符,也就是說,他們表示該字母本身,數字也是一樣的。其他一些稍微複雜的字符,如標點符號和白字符(空格、製表符等),要用到轉義序列。所有的轉義序列都用反斜線()打頭。製表符的轉義序列是:t。所以如果我們要偵測一個字串是否以製表符開頭,可以用這個模式:
^t
類似的,用n表示“新行”,r表示回車。其他的特殊符號,可以用在前面加上反斜杠,如反斜杠本身用\表示,句號.用.表示,以此類推。
字元簇
在INTERNET的程式中,正規表達式通常用來驗證使用者的輸入。當使用者提交一個FORM以後,要判斷輸入的電話號碼、地址、EMAIL地址、信用卡號碼等是否有效,用普通的基於字面的字元是不夠的。
所以要用一種更自由的描述我們要的模式的辦法,它就是字符簇。要建立一個表示所有元音字符的字符簇,就把所有的元音字符放在一個方括號裡:
[AaEeIiOoUu]
這個模式與任何元音字符匹配,但只能表示一個字元。用連字號可以表示一個字符的範圍,如:
[a-z] //匹配所有的小寫字母
[A-Z] //匹配所有的大寫字母
[a-zA-Z ] //符合所有的字母
[0-9] //符合所有的數字
[0-9.-] //符合所有的數字,句號和減號
[ frtn] //匹配所有的白字符
同樣的,這些也只表示一個字符,這是一個非常重要的。如果要符合一個由一個小寫字母和一位數字組成的字串,例如"z2"、"t6"或"g7",但不是"ab2"、"r2d3" 或"b52"的話,用這個模式:
^[a-z][0-9]$
儘管[a-z]代表26個字母的範圍,但在這裡它只能與第一個字符是小寫字母的字符串匹配。
前面曾經提到^表示字串的開頭,但它還有另外一個意義。當在一組方括號裡使用^是,它表示「非」或「排除」的意思,常常用來剔除某個字元。還用前面的例子,我們要求第一個字元不能是數字:
^[^0-9][0-9]$
這個模式與"&5"、"g7 "及"-2"是匹配的,但與"12"、"66"是不匹配的。以下是幾個排除特定字元的例子:
[^a-z] //除了小寫字母以外的所有字元
[^\/^] //除了()(/)(^)之外的所有字元
[^"'] //除了雙引號(")和單引號(')之外的所有字元
特殊字元"." (點,句號)在正規表達式中用來表示除了「新行」之外的所有字元。所以模式"^.5$"與任何兩個字元的、以數字5結尾和以其他非「新行」字元開頭的字串相符。模式"."可以符合任何字串,除了空字串和只包括一個「新行」的字串。
PHP的正規表達式有一些內建的通用字元簇,清單如下:
字元簇意義
[[:alpha:]] 任何字母
[[:digit :]] 任何數字
[[:alnum:]] 任何字母和數字
[[:space:]] 任何白字
[[:upper:]] 任何大寫字母
[[ :lower:]] 任何小寫字母
[[:punct:]] 任何標點符號
[[:xdigit:]] 任何16進制的數字,相當於[0-9a-fA-F]

在PHP中,可以使用session_status()或session_id()來檢查會話是否已啟動。 1)使用session_status()函數,如果返回PHP_SESSION_ACTIVE,則會話已啟動。 2)使用session_id()函數,如果返回非空字符串,則會話已啟動。這兩種方法都能有效地檢查會話狀態,選擇使用哪種方法取決於PHP版本和個人偏好。

sessionsarevitalinwebapplications,尤其是在commercePlatform之前。

在PHP中管理並發會話訪問可以通過以下方法:1.使用數據庫存儲會話數據,2.採用Redis或Memcached,3.實施會話鎖定策略。這些方法有助於確保數據一致性和提高並發性能。

PHPsessionshaveseverallimitations:1)Storageconstraintscanleadtoperformanceissues;2)Securityvulnerabilitieslikesessionfixationattacksexist;3)Scalabilityischallengingduetoserver-specificstorage;4)Sessionexpirationmanagementcanbeproblematic;5)Datapersis

負載均衡會影響會話管理,但可以通過會話複製、會話粘性和集中式會話存儲解決。 1.會話複製在服務器間複製會話數據。 2.會話粘性將用戶請求定向到同一服務器。 3.集中式會話存儲使用獨立服務器如Redis存儲會話數據,確保數據共享。

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

PHP會話的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。 1.Cookies通過在客戶端存儲數據來管理會話,簡單但安全性低。 2.Token-basedAuthentication使用令牌驗證用戶,安全性高但需額外邏輯。 3.Database-basedSessions將數據存儲在數據庫中,擴展性好但可能影響性能。 4.Redis/Memcached使用分佈式緩存提高性能和擴展性,但需額外配

Sessionhijacking是指攻擊者通過獲取用戶的sessionID來冒充用戶。防範方法包括:1)使用HTTPS加密通信;2)驗證sessionID的來源;3)使用安全的sessionID生成算法;4)定期更新sessionID。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。