成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP 正則表達(dá)式入門 Getting Started with PHP Regular Expre

zhangke3016 / 2396人閱讀

摘要:兼容的正則表達(dá)式已經(jīng)實(shí)現(xiàn)了很多使用不同解析引擎的正則函數(shù)。中主要有兩個(gè)正則解析器一個(gè)稱為,另一個(gè)稱為兼容正則表達(dá)式。在中,每個(gè)正則表達(dá)式模式都是使用符合格式的字符串。

原文鏈接: Getting Started with PHP Regular Expressions

Last-Modified: 2019年5月10日16:23:19

譯者注:

本文是面向0正則基礎(chǔ)的phper, 很多正則的高級(jí)使用都沒(méi)有涉及到, 僅僅是一份簡(jiǎn)單的入門.

對(duì)于有基礎(chǔ)的, 可直接查看本文末尾的正則表達(dá)式語(yǔ)法快速一覽表(圖) (不涉及修飾符)

譯者追加 - 語(yǔ)法速覽表

1. 什么是正則表達(dá)式

正則表達(dá)式(regex 或 regexp)的主要目的在于有效地搜索給定文本中的模式. 這些搜索模式使用正則表達(dá)式解析器理解的特殊格式編寫。

正則表達(dá)式源自Unix系統(tǒng)中一個(gè)名為grep的程序,該程序是用于幫助用戶處理字符串和操作文本。 通過(guò)遵循一些基本規(guī)則,我們可以創(chuàng)建非常復(fù)雜的搜索模式。

例如,你被賦予一項(xiàng)任務(wù): 檢查電子郵件或電話號(hào)碼是否具有正確的格式。通過(guò)使用一些簡(jiǎn)單的命令,這些問(wèn)題可以通過(guò)正則表達(dá)式輕松解決。 正則語(yǔ)法初學(xué)時(shí)并不那么簡(jiǎn)單,但是一旦你學(xué)會(huì)了它,你就會(huì)意識(shí)到你可以輕松地進(jìn)行復(fù)雜搜索,只需鍵入簡(jiǎn)短的字符就可以從不同的角度處理問(wèn)題。

2. Perl兼容的正則表達(dá)式

PHP已經(jīng)實(shí)現(xiàn)了很多使用不同解析引擎的正則函數(shù)。PHP中主要有兩個(gè)正則解析器,一個(gè)稱為POSIX,另一個(gè)稱為PCRE(Perl Compatible Regular Expression, Perl兼容正則表達(dá)式)。

POSIX的PHP函數(shù)前綴是 ereg_。自從PHP 5.3發(fā)布后,這個(gè)引擎已被棄用,但讓我們來(lái)看看更優(yōu),更快的PCRE引擎。

在PHP中,每個(gè)PCRE函數(shù)都以 preg_ 開頭,例如 preg_match 或 preg_replace。您可以閱讀PHP文檔中的完整功能列表。

3. 基礎(chǔ)語(yǔ)法

要使用正則表達(dá)式,你首先需要學(xué)習(xí)語(yǔ)法。該語(yǔ)法包含一系列字母,數(shù)字,點(diǎn),連字符和特殊符號(hào),我們可以使用不同的括號(hào)將它們組合在一起。

在PHP中,每個(gè)正則表達(dá)式模式都是使用符合 Perl 格式的字符串。在 Perl 中,在正斜杠之間寫入正則表達(dá)式模式,例如 /hello/。在PHP中則是一個(gè)字符串 "/hello/"。

現(xiàn)在,讓我們看看一些運(yùn)算符,它們是正則表達(dá)式的基本構(gòu)建塊。

語(yǔ)法 說(shuō)明
^ ^ 標(biāo)志著模式的開始,盡管在某些情況下它可以省略
$ 與 ^ 符號(hào)對(duì)應(yīng),$ 符號(hào)標(biāo)志著搜索模式的結(jié)束
. 匹配任何單個(gè)字符
? 它將匹配前面的模式 0 或 1 次
+ 它將匹配前面的模式 1 或 更多 次
* 它將匹配前面的模式 0 或 更多次
布爾 或
匹配范圍內(nèi)的元素
() 將不同的模式元素組合在一起
[] 匹配中括號(hào)之間的任何單個(gè)字符
{min, max} 它用于匹配確切的字符數(shù)
d 匹配任何單個(gè)數(shù)字
D 匹配任何單個(gè)非數(shù)字
w 匹配單詞字符, 包括下劃線 _
W 匹配任何非單詞字符
s 匹配空白符

作為PHP中的一個(gè)補(bǔ)充,使用簡(jiǎn)單的斜杠 來(lái)轉(zhuǎn)義正斜杠字符。示例:"/he/llo/"

為了簡(jiǎn)要了解如何使用這些運(yùn)算符,讓我們看一些示例:

示例 說(shuō)明
"/hello/" 匹配單詞 hello
"/^hello/" 匹配處于字符串開頭的 hello . 可能的匹配比如 hello, helloworld , 但不會(huì)匹配 worldhello
"/hello$/" 匹配處于字符串結(jié)尾的 hello
"/he.o/" 匹配任何位于 heo 的任何字符, 比如 helo , helo, heyo, 但不會(huì)匹配 hello
"/(he)?llo/" 匹配如 llohello
"/(hello)+/" 匹配 hello 一次或多次, 如 hello ,hellohello
"/(he)*llo/" 匹配 llo, hello, hehello, 但不會(huì)匹配 hellooo
`"/hello world/"` 匹配單詞 helloworld
"/[A-Z]/" 匹配從 AZ 的大寫字母
"/[abc]/" 匹配 a, b, c 中任意一個(gè)字符*
"/abc{1}/" ab 后精確匹配一個(gè) c 字符, 如 abc, 但不匹配 abcc
"/abc{1,}/" ab 后匹配一個(gè)或多個(gè) c字符, 如 abc , abcc
"/abc{2,4}/" ab 后匹配 2~4 個(gè) c, 如 abcc, abccc, abcccc, 但不匹配 abc
譯者注: 上面示例中原文存在一些錯(cuò)誤, 此處已修正.

除了運(yùn)算符之外,還有正則表達(dá)式修飾符,可以全局改變搜索模式的行為。

正則表達(dá)式修飾符放在模式之后,就像 "/hello/i" 一樣,它們由單個(gè)字母組成,例如 i 表示模式不區(qū)分大小寫, x 表示忽略模式中的空白字符。 關(guān)修飾符的完整列表,請(qǐng)?jiān)L問(wèn)PHP的在線文檔。

正則表達(dá)式的真正功能在于組合這些運(yùn)算符和修飾符,從而創(chuàng)建相當(dāng)復(fù)雜的搜索模式。

4. 在 PHP 中使用正則

在PHP中,我們總共有九個(gè)PCRE函數(shù)可以使用。這是列表:

preg_filter – 執(zhí)行一個(gè)正則表達(dá)式搜索和替換

preg_grep – 返回匹配模式的數(shù)組條目

preg_last_error – 返回最后一個(gè)PCRE正則執(zhí)行產(chǎn)生的錯(cuò)誤代碼

preg_match – 執(zhí)行匹配正則表達(dá)式

preg_match_all – 執(zhí)行一個(gè)全局正則表達(dá)式匹配

preg_quote – 轉(zhuǎn)義正則表達(dá)式字符

preg_replace – 執(zhí)行一個(gè)正則表達(dá)式的搜索和替換

preg_replace_callback – 執(zhí)行一個(gè)正則表達(dá)式搜索并且使用一個(gè)回調(diào)進(jìn)行替換

preg_split – 通過(guò)一個(gè)正則表達(dá)式分隔字符串

最常用的兩個(gè)函數(shù)是 preg_matchpreg_replace 。

讓我們首先創(chuàng)建一個(gè)測(cè)試字符串,我們將在其上執(zhí)行正則表達(dá)式搜索。經(jīng)典的 Hello World 示例:

$test_string = "hello world";

如果我們只是想搜索單詞hello或world,那么搜索模式將如下所示:

preg_match("/hello/", $test_string);
preg_match("/world/", $test_string);

如果我們希望查看字符串是否以單詞 hello 開頭,我們只需將 ^ 字符放在搜索模式的開頭,如下所示:

preg_match("/^hello/", $test_string);

請(qǐng)注意,正則表達(dá)式區(qū)分大小寫,上面的模式與單詞 hElLo 不匹配。 如果我們希望模式不區(qū)分大小寫,則應(yīng)該應(yīng)用以下修飾符:

preg_match("/^hello/i", $test_string);    

注意模式末尾正斜杠后面的字符 i

現(xiàn)在讓我們來(lái)看一個(gè)更復(fù)雜的搜索模式。如果我們要確認(rèn)字符串中的前五個(gè)字符由字母, 數(shù)字 組合,該怎么辦?

preg_match("/^[A-Za-z0-9]{5}/", $test_string);

讓我們剖析一下這種搜索模式 . 首先,通過(guò)使用 ^,我們指定該字符串必須以字母, 數(shù)字開頭。這由 [A-Za-z0-9] 來(lái)指定。

A-Z 表示從A到Z的所有字符, a-z 則表示從 a到z的所有小寫字符.

{5} 告知正則表達(dá)式解析器此處剛好有五個(gè)字符。如果是六個(gè)而不是五個(gè),解析器匹配不到任何東西.

上述正則表達(dá)式可以優(yōu)化為以下形式:

preg_match("/^w{5}/", $test_string);

w 表示任何字母, 數(shù)字, 包括下劃線字符 _


5. 該章節(jié)不存在
譯者注: 原文沒(méi)有 5... 的確沒(méi)有
6. 有用的正則函數(shù)

以下是一些使用正則表達(dá)式的PHP函數(shù),您可以每天使用它們。

譯者注: 實(shí)際上有其他更為方便的替代函數(shù)

比如驗(yàn)證郵箱可以使用 filter_var($email,FILTER_VALIDATE_EMAIL)

想了解更多的點(diǎn)擊此處

6.1 驗(yàn)證e-mail

此函數(shù)將驗(yàn)證給定的電子郵件地址字符串,以查看其是否具有正確的格式。

function validate_email($email_address)
{
    if( !preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+
                     ([a-zA-Z0-9._-]+)+$/", $email_address))
    {
        return false;
    }    
    return true;
}
6.2 驗(yàn)證URL
function validate_url($url)
{
    return preg_match("|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?
                      (/.*)?$|i", $url);
}
6.3 移除重復(fù)的單詞

我經(jīng)常在文本中找到重復(fù)的單詞,比如 this this。這個(gè)方便的函數(shù)功能可以刪除這些重復(fù)的單詞。

function remove_duplicate_word($text)
{
    return preg_replace("/(w+)s1/i", "$1", $text);
}

譯者注: 原文處的正則表達(dá)式有誤, 此處已修正. 以下是原文給出的函數(shù):

function remove_duplicate_word($text)
{
    return preg_replace("/s(w+s)1/i", "$1", $text);
}
6.4 驗(yàn)證字母數(shù)字,短劃線,下劃線和空格
function validate_alpha($text)
{
    return preg_match("/^[A-Za-z0-9_- ]+$/", $text);
}
6.5 驗(yàn)證美國(guó)郵政編碼
function validate_zip($zip_code)
{
    return preg_match("/^([0-9]{5})(-[0-9]{4})?$/i",$zip_code);    
}
7. 正則速查表 7.1 元字符
元字符 Description
^ 標(biāo)記字符串的開頭
$ 標(biāo)記字符串的結(jié)尾
. 匹配任意單個(gè)字符
布爾或
() 組元素
[abc] 匹配 a,b,c 中任意一個(gè)
[^abc] 匹配除 a,b,c 外的任意一個(gè)
s 空白字符
a? 0 個(gè)或 1 個(gè) a, 等同于 a{0,1}
a* 0 個(gè)或 多個(gè) a
a+ 1 個(gè)或 多個(gè) a
a{2} 精確匹配 2 個(gè) a
a{,5} 最多 5 個(gè) a
a{5,10} 匹配 5~10 個(gè) a
w 單詞字符, 等同于 [A-Za-z0-9_]
W 任何非單詞字符
s 任何空白字符
S 任何非空白字符
d 任何數(shù)字, 等同于 [0-9]
D 任何非數(shù)字, 等同于 [^0-9]
7.2 模式修飾符
模式修飾符 說(shuō)明
i 忽略大小寫
m 多行模式
S 模式的額外分析
u 模式字符串被認(rèn)為是 UTF-8 編碼
譯者注: 上述模式修飾符是大小寫敏感的.

還有一部分修飾符原文沒(méi)有列舉出來(lái), 畢竟只是面向入門

8. 相關(guān)參考書目

15 PHP Regular Expression for Web Developers

Mastering Regular Expressions in PHP

Introduction to PHP Regex

9. Author: Joel Reyes
譯者注: 該部分不翻譯

Joel Reyes Has been designing and coding web sites for several years, this has lead him to be the creative mind behind Looney Designer a design resource and portfolio site that revolves around web and graphic design.

Write for Us! We are looking for exciting and creative articles, if you want to contribute, just send us an email.


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31435.html

相關(guān)文章

  • [Regular Expression]Mastering Python Regular Expre

    摘要:續(xù)上基礎(chǔ)通俗正則表達(dá)中兩個(gè)重要對(duì)象如下圖使用函數(shù),返回為對(duì)象使用函數(shù),如果到存在的結(jié)果,則返回對(duì)象,否則返回福利一個(gè)在線驗(yàn)證自己寫的正則表達(dá)式是否正確的網(wǎng)站關(guān)于正則表達(dá)式中的如下圖中的前加入字母表明里面的表達(dá)式已經(jīng)是而前面加了,表明,在做之 續(xù)上:[Regular Expression]Mastering Python Regular Expression基礎(chǔ)通俗(2) 1:Pyth...

    sihai 評(píng)論0 收藏0
  • [Regular Expression]Mastering Python Regular Expre

    摘要:續(xù)上基礎(chǔ)通俗三類常用的的簡(jiǎn)寫形式偷懶需要用來(lái)對(duì)某一類特定字符進(jìn)行匹配,通常,我們用的最多的字符就是下面的三類數(shù)字,字母和這類看不到占位符,上一部分學(xué)過(guò)通過(guò)方括號(hào)表示這三類的的方法由于上面的表達(dá)試比較長(zhǎng),所以需要有一種更簡(jiǎn)單的寫法可以 續(xù)上:[Regular Expression]Mastering Python Regular Expression基礎(chǔ)通俗(1) 三類常用的meta...

    daydream 評(píng)論0 收藏0
  • PHP正則達(dá)式

    摘要:但在某些情況下,用正則表達(dá)式去驗(yàn)證一個(gè)字符串比較復(fù)雜和費(fèi)時(shí)。驗(yàn)證信用卡號(hào)驗(yàn)證域名從特定中提取域名將文中關(guān)鍵詞高亮顯示對(duì)于開發(fā)人員來(lái)說(shuō),正則表達(dá)式是一個(gè)非常有用的功能,它提供了查找,匹配,替換句子,單詞,或者其他格式的字符串。 正則表達(dá)式是程序開發(fā)中一個(gè)重要的元素,它提供用來(lái)描述或匹配文本的字符串,如特定的字符、詞或算式等。但在某些情況下,用正則表達(dá)式去驗(yàn)證一個(gè)字符串比較復(fù)雜和費(fèi)時(shí)。本文...

    Nekron 評(píng)論0 收藏0
  • Python實(shí)現(xiàn)命令行監(jiān)控北京實(shí)時(shí)公交之一

    摘要:開頭先放上效果展示在命令行輸入,顯示基本信息,如下在命令行輸入,顯示北京路公交車的位置,如下紅色的說(shuō)明在梅園附近有一輛公交車,并且會(huì)不斷刷新。 開頭先放上效果展示 在命令行輸入 python bus.py -i,顯示app基本信息,如下: showImg(https://segmentfault.com/img/bV8gmb?w=644&h=454); 在命令行輸入 python bu...

    vboy1010 評(píng)論0 收藏0
  • PHP 正則達(dá)式

    摘要:規(guī)范為的縮寫,中文即兼容正則表達(dá)式,由開發(fā)的庫(kù),為很多現(xiàn)代工具所使用,大多數(shù)編程語(yǔ)言的正則表達(dá)式也都是集成該規(guī)范。接下來(lái)本文會(huì)對(duì)規(guī)范的正則表達(dá)式作出詳細(xì)介紹。正則語(yǔ)法分隔符當(dāng)使用函數(shù)的時(shí)候,模式需要由分隔符閉合包裹。 概述 正則表達(dá)式(Regular Expression)是一種字符匹配工具,通過(guò)構(gòu)建具有特定規(guī)則的模式,和輸入字符串?dāng)?shù)據(jù)進(jìn)行比較,然后進(jìn)行匹配、分割、替換等等的相關(guān)操作。...

    rozbo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<