PHP與正則表達(dá)系列之一: PHP中的正則表達(dá)式_PHP教程
推薦:PHP讀取RSS feed源代碼(帶注釋,可讀取多個(gè)源)因?yàn)榫W(wǎng)站需要讀取不同來源的rss feed,寫了一個(gè)php程序來循環(huán)讀取rss feed,為了方便閱讀及了解程序?qū)崿F(xiàn)過程,加上了注釋,和大家共同學(xué)習(xí)。而助易網(wǎng)的rss讀取就是在這個(gè)程序的基礎(chǔ)上稍做改造而
今天起,會(huì)開始弄一個(gè)PHP教程系列文章. 主要是針對(duì)正則表達(dá)式的。
大概的內(nèi)容排序是這樣安排的:
1. PHP 中的正則表達(dá)式
2. 八個(gè)實(shí)用的PHP正則表達(dá)式
3. 如何書寫更易閱讀的PHP正則表達(dá)式
4. 半小時(shí)精通正則表達(dá)式
5. 正則在文章采集系統(tǒng)中的應(yīng)用及常見問題答疑
6. ...更多策劃中
文章內(nèi)容來源方面,有本站舊文重新整理而來,也有翻譯英文文獻(xiàn)而來(感謝在加拿大的!oEL同學(xué)),還有些是個(gè)人心得。
個(gè)人能力有限,肯定有一些錯(cuò)誤,發(fā)現(xiàn)的朋友請(qǐng)給予提醒以及時(shí)更正. 不至誤導(dǎo)新手. 如果文章能給大家一些參考,就很滿足了。
PHP與正則表達(dá)系列之: PHP 中的正則表達(dá)式
正則表達(dá)式簡介及正則表達(dá)式在PHP中的作用
正則表達(dá)式是一種表示規(guī)則的途經(jīng),在 PHP 中利用這些規(guī)則可以讓你靈活變通地匹配、檢驗(yàn)、替換以及字符串。本文涉及到 PCRE 的基礎(chǔ),以及如何使用 preg_match(),preg_replace(),and preg_split() 函數(shù)。
接下來就讓我們從實(shí)例循序漸進(jìn)地開始學(xué)習(xí)如何使用這些函數(shù)。
規(guī)則匹配 preg_match
利用 preg_match(),我們可以完成字符串的規(guī)則匹配。如果找到一個(gè)匹配,preg_match() 函數(shù)返回 1,否則返回 0。還有一個(gè)可選的第三參數(shù)可以讓你把匹配的部分存在一個(gè)數(shù)組中。在驗(yàn)證數(shù)據(jù)時(shí)這個(gè)功能可以變得非常有用。
$string = "football"; if (preg_match('/foo/', $string)) { // 匹配正確 } |
上面的例子將成功匹配,因?yàn)閱卧~ football 里面包含 foo。現(xiàn)在我們來試一個(gè)更復(fù)雜的,例如驗(yàn)證一個(gè) Email 地址。
$string = "first.last@domain.uno.dos"; if (preg_match( '/^[^0-9][a-zA-Z0-9_] ([.][a-zA-Z0-9_] )*[@][a-zA-Z0-9_] ([.][a-zA-Z0-9_] )*[.][a-zA-Z]{2,4}$/', $string)) { // 驗(yàn)證Email地址 } |
這個(gè)例子將驗(yàn)證出此 Email 地址為正確格式。現(xiàn)在讓我們來看看這段正則表達(dá)式所代表的各種規(guī)則。
PCRE 顧名思義,與在 Perl 中的正則表達(dá)式有相同的語法,所以每段正則表達(dá)式必須要有一對(duì)定界符。我們一般使用 / 為定界符。
開頭的 ^ 和結(jié)尾的 $ 讓PHP從字符串開頭檢查到結(jié)尾。假使沒有 $,程序仍會(huì)匹配到 Email 的末尾。
[ 和 ] 被用來限制許可輸入類型。例如 a-z 允許所有的小寫字母,A-Z 允許所有的大寫字母,0-9 所有數(shù)字,等等,以及更多其他類型。
{ 和 } 被用來限制期望的字符數(shù)。例如 {2,4} 表示字符串的每一節(jié)可以有 2-4 字符長度,像是 .com.cn 或 .info。在這里, "." 并不算一個(gè)字符,因?yàn)?{2,4} 之前定義的許可輸入類型只有大小寫字母,故此段只匹配大小寫字母
( 和 ) 被用來合并小節(jié),并定義字符串中必須存在的字符。(a|b|c) 能夠匹配 a 或 b 或 c。
(.) 將匹配所有字符,而 [.] 只匹配 "." 本身。
要使用一些符號(hào)本身,必須在前增加一個(gè) 。這些字符有: ( ) [ ] . * ? ^ | $
規(guī)則替換 preg_replace
preg_replace 允許你替換字符串中匹配到你定義的正則表達(dá)式。一個(gè)簡單的注釋移除功能:
preg_replace('[(/*) . (*/)]', '', $val);
這段代碼可以移除在 PHP 和 CSS 中使用 /* 注釋 */ 格式的多多行注釋。其中的三個(gè)參數(shù)分別為正則表達(dá)式,要替換成的字符串和要替換的目標(biāo)字符串(這里要做移除功能,所以是個(gè)空白字符串 -> '')。如果你想匹配次級(jí)規(guī)則,可以使用 $0 代表全部匹配,$1、$2 等,以此類推代表分別的次級(jí)規(guī)則。
規(guī)則分割preg_split
preg_split 可以將整段字符串按匹配到的正則表達(dá)式分割成 1、2或更多字符的多段。比如獲取標(biāo)簽,無論是用空格還是逗號(hào)分隔的:
$tags = preg_split('/[,]/', 'my,tags,unevenly,spaced'); |
正則表達(dá)式是一個(gè)很實(shí)用的技巧,讓你可以專注于所期望得到的內(nèi)容。
但有時(shí)候一段正則表達(dá)式并不能讓你如愿以償?shù)玫筋A(yù)期的結(jié)果是件很煩人的事,所以我將在本系列的第二篇文章附上一些簡單的語法指南希望能夠幫到大家。
附:PCRE 語法指南
/ 定界符
^ 字符串頭
$ 字符串尾
[a-z] 所有小寫字母
[A-Z] 所有大寫字母
[0-9] 所有數(shù)字
? 零或一個(gè)緊接前的字符
* 零或多個(gè)緊接前的字符
一或多個(gè)緊接前的字符
{4} 4個(gè)緊接前的字符
{4,8} 4-8個(gè)緊接前的字符
. 任意字符
(red|green|blue) Red 或 green 或 blue(紅 或 綠 或 藍(lán))
s 空格
特殊字符(需要在前加 )
( ) [ ] . * ? ^ | $
分享:PHP開發(fā)大型項(xiàng)目的方法:OOP思想面向?qū)ο缶幊痰母拍睿? 不同的作者之間說法可能不一樣,但是一個(gè)OOP語言必須有以下幾方面: 抽象數(shù)據(jù)類型和信息封裝、繼承、多態(tài) 在PHP中是通過類來完成封裝的: 代碼:
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- PHP daddslashes 方法
- PHP 文件編程綜合案例-文件上傳的實(shí)現(xiàn)
- 解讀PHP如何使用 CURL 同步抓取多個(gè)網(wǎng)頁
- 用PHP操縱Oracle的LOB類型的數(shù)據(jù)
- 利用PHP和AJAX創(chuàng)建RSS聚合器
- 面向搜索引擎的URL優(yōu)化
- 基于magic_quotes_gpc與magic_quotes_runtime的區(qū)別與使用介紹
- 解析用PHP讀寫音頻文件信息的詳解(支持WMA和MP3)
- PHP實(shí)例:用PHP簡單實(shí)現(xiàn)多條件查詢
- PHP函數(shù)學(xué)習(xí)之PHP函數(shù)點(diǎn)評(píng)
- 相關(guān)鏈接:
- 教程說明:
PHP教程-PHP與正則表達(dá)系列之一: PHP中的正則表達(dá)式。