首頁 後端開發 php教程 PHP POSIX正規表示式

PHP POSIX正規表示式

Dec 04, 2019 am 10:31 AM
posix

1 基礎知識

正規表示式是一種描述一段文字模式的方法。到目前為止,我們前面所使用過的精確(文字)匹配也是一種正規表示式。例如,前面我們曾經搜尋過正規表示式的術語,像是"shop"和"delivery"。

在PHP中,匹配正規表示式更有點像strstr()匹配,而不像相等比較,因為是在一個字串的某個位置(如果不指明則可能在字串中的任何位置)匹配另一個字串。例如,字串"shop"符合正規表示式"shop"。它也可以匹配正規表示式"h"、"ho",等。

除了精確匹配字元外,還可以用特殊字元來指定表達式的元意(meta-meaning)。例如,使用特殊字 符,可以指定一個在字串開始或末尾肯定存在的模式,該模式的某部分可能被重複,或模式中的字元屬於特定的某一類型。另外,也可以依特殊字元的出現來匹 配。接下來,我們將逐一討論這些變化。

2 字元集和類別

使用字元集可以馬上給出比精確匹配功能還要強大的正規表示式。字元集可以用於匹配屬於特定類型的任何字元;事實上它們是一種通配符。

首先,可以用字元作為一個通配符來取代除換行符(\n)之外的任一個字元。例如,正規表示式:

.at
登入後複製

可以與"cat"、"sat"和"mat"等進行比對。通常,這種通配符匹配用於作業系統中的檔案名稱匹配。

但是,使用正規表示式,可以更具體地說明希望匹配的字元類型,而且可以指明字元所屬的一個集合。在前面的例子中,正規表示式符合"cat"和"mat",但也可以符合"#at"。如果要限定它是a到z之間的字符,就可以像下面這樣指明:

[a-z]at
登入後複製

任何包含在方括號([])中的內容都是一個字符類——一個被匹配字符所屬的字元集合。請注意,方括號中的表達式只符合一個字元。

我們可以列出一個集合,例如:

[aeiou]
登入後複製

可以用來表示母音子母。

也可以描述一個範圍,正如前面用連字符那樣,也可以是一個範圍集:

[a-zA-Z]
登入後複製

這個範圍集代表任何的大小寫字母。

此外,也可以用集合來指明字元不屬於某個集合。例如:

[^a-z]
登入後複製

可以用來匹配任何不在a和z之間的字元。當把脫字符號(^)包括在方括號裡面時,表示否。當符號用在方括號的外面,則表示另一個意思,我們稍後將詳細介紹。

3 重複

通常,讀者會希望指明某個字串或字元類別將會不只一次地出現。可以在正規表示式中使用兩個特殊字元來代替。符號「*」表示這個模式可以重複0次或更多次,符號「 」則表示這個模式可以重複1次或更多次。這兩個符號應該放在要作用的表達式的後面。

例如:

[[:alnum:]]+
登入後複製

表示「至少有一個字母字元」。

4 子表達式

通常,將一個表達式分隔為幾個子表達式是非常有用的,例如,可以表示「至少這些字串中的一個需要精確匹配」。可以使用圓括號來實現,與數學表達式中的方法一樣。

例如:

(very)*large
登入後複製

可以匹配"large"、"very large"、"very very large"等。

5 子表達式計數

可以用在花括號({})中的數字表達式來指定內容允許重複的次數。可以指定一個確切的重複次數({3}表示重複3次),或一個重複次數的範圍({2,4}表示重複2~4次),或一個開底域的重複範圍({2, }表示至少要重複兩次)。

例如:

(very){1,3}
登入後複製

表示符合"very"、"very very"和"very very very"。

6 定位到字串的開始或結尾

[a-z]模式將符合任何包含了小寫字母字元的字串。無論該字串只有一個字符,或者在整個更長的字串中只包含一個匹配的字符,都沒有關係。

也可以確定一個特定的子表達式是否出現在開始、結尾或在兩個位置都出現。當要確定字串中只有要找的單字而沒有其他單字出現時,它將相當有用。

脫字符號(^)用於正規表示式的開始,表示子字串必須出現在被搜尋字串的開始處,字元「$」用於正規表示式的結尾,表示子字串必須出現在字串的末尾。

例如,以下是在字串開始處匹配bob:

^bob
登入後複製

這個模式將匹配com出現在字串末尾處的字串:

com$
登入後複製

最後,這個模式將匹配只包含a到z之間一個字元的字串:

^[a-z]$
登入後複製

7 分支

可以使用正则表达式中的一条竖线来表示一个选择。例如,如果要匹配com、edu或net,就可以使用如下所示的表达式:

com|edu|net
登入後複製

8 匹配特殊字符

如果要匹配本节前面提到过的特殊字符,例如,.、{或者$,就必须在它们前面加一个反斜杠(\)。如果要匹配一个反斜杠,则必须用两个反斜杠(\\)来表示。

在PHP中,必须将正则表达式模式包括在一个单引号字符串中。使用双引号引用的正则表达式将带来一些不必要的复杂性。PHP还使用反斜杠来转义特殊字符——例如反斜杠。

如果希望在模式中匹配一个反斜杠,必须使用两个反斜杠来表示它是一个反斜杠字符,而不是一个转义字符。

同样,由于相同的原因,如果希望在一个双引号引用的PHP字符串中使用反斜杠字符,必须使用两个反斜杠。这可 能会有些混淆,这样要求的结果将是表示一个包含了反斜杠字符的正则表达式的一个PHP字符串需要4个反斜杠。PHP解释器将这4个反斜杠解释成2个。然 后,由正则表达式解释器解析为一个。

$符号也是双引号引用的PHP字符串和正则表达式的特殊字符。要使一个$字符能够在模式中匹配,必须使用“\\\$”。因为这个字符串被引用在双引号中,PHP解释器将其解析为\$,而正则表达式解释器将其解析成一个$字符。

9 在智能表单中应用

在智能表单应用程序中,正则表达式至少有两种用途。第一种用途是在顾客的反馈中查找特定的名词。使用正则表达 式,可以做得更智能一些。使用一个字符串函数,如果希望匹配"shop"、"customer service"或"retail",就必须做3次不同的搜索。如果使用一个正则表达式,就可以同时匹配所有3个,如下所示:

shop|customer service|retail
登入後複製

第二个用途是验证程序中用户的电子邮件地址,这需要通过用正则表达式来对电子邮件地址的标准格式进行编码。这 个格式中包含一些数字或标点符号,接着是符号“@”,然后是包括文字或数字和字符组成的字符串,后面接着是一个“.”(点号),后面包括文字或数字以连字 符组成的字符串,可能还有更多的点号,直到字符串结束,它的编码如下所示:

^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$
登入後複製

子表达式^[a-zA-Z0-9_\-.]+表示“至少由一个字母、数字、下画线、连字符、点号或者这些字符组合为开始的字符串”。请注意,当在一个字符类的开始或末尾处使用点号时,点号将失去其特殊通配符的意义,只能成为一个点号字符。

符号“@”匹配字符“@”。

而子表达式[a-zA-Z0-9\-]+与包含文字数字字符和连字符的主机名匹配。请注意,我们去除了连字符,因为它是方括号内的特殊字符。

字符组合“\.”匹配“.”字符。我们在字符类外部使用点号,因此必须对其转义,使其能够匹配一个点号字符。

子表达式[a-zA-Z0-9\-\.]+$匹配域名的剩下部分,它包含字母、数字和连字符,如果需要还可包含更多的点号直到字符串的末尾。

不难发现,有时一个无效的电子邮件地址也会符合这个正则表达式。找到所有无效电子邮件几乎是不可能的,但是经 过分析,情形将会有所改善。可以按许多不同的方式精化这个表达式。例如,可以列出所有有效的顶级域(TLD)。当对某些对象进行限制的时候,请千万小心, 因为可能排斥1%的有效数据的校验函数比允许出现10%的无效数据的校验函数还要麻烦。

推荐:《PHP教程

以上是PHP POSIX正規表示式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
<🎜>掩蓋:探險33-如何獲得完美的色度催化劑
2 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1677
14
CakePHP 教程
1430
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? 說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP和框架:現代化語言 PHP和框架:現代化語言 Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

為什麼要使用PHP?解釋的優點和好處 為什麼要使用PHP?解釋的優點和好處 Apr 16, 2025 am 12:16 AM

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

PHP的影響:網絡開發及以後 PHP的影響:網絡開發及以後 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

See all articles