正則表達式工具php
⑴ 詳解php正則表達式:什麼是正則表達式
正則表達式,又稱規則表達式,英文名為Regular Expression,在代碼中常簡寫為regex、regexp或RE,是計算機科學的一個概念。正則表通常被用來檢索、替換那些符合某個模式(規則)的文本。
正則表達式是對字元串(包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為「元字元」))操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個「規則字元串」,這個「規則字元串」用來表達對字元串的一種過濾邏輯。正則表達式是一種文本模式,模式描述在搜索文本時要匹配的一個或多個字元串。
⑵ 正則表達式 PHP
{}中不能使用反向引用,至少不能直接使用,有沒有其他使用方法不祥(可能性比較小)
建議解決方式:
使用如下正則以及判斷
$str="5aaaaa";
$ret=preg_match("/^(\d)(\w)\\2*$/",$str,$phones);
if($ret==1)
{
if($phones[1]==strlen($phones[0])-1)
{
echo('true');
}
else
{
echo('false1');
}
}
else
{
echo('false2');
}
說明:
先用正則表達式/^(\d)(\w)\\2*$/確定字元串必須為數字開頭,第二個為字元,從第二個字元開始重復直到結束
然後進行條件判斷,因為$phones[1]中存放了第一個字元,因此比較字元串長度就可以了
===========================================
補充:
如果你的這個字元串需要從某個大的正則表達式中的匹配,那麼我建議你用括弧把這個字元串匹配到的結果括起來做一個子模式.
例如:
$str="(5ab3de)(6cde9gh)";
$ret=preg_match("/\(((\d)\w*)\)\(((\d)\w*)\)/",$str,$phones);
print_r($phones);
這樣$phones[1]表示字元串,$phones[2]表示字元串長度,然後再做判斷.對於雜亂無章的字元串反而簡單用\w*就可以了.
⑶ php 正則表達式
建議你到我的網站上下載PHP5參考手冊,里邊有詳細的正則表達式的參考。
模式要有開始和結束的字元,一下都是合法的:
/
|
#
'
前提是模式中不能再出現這個字元了。
結尾的/後邊的is是模式修政府,具體如下
i (PCRE_CASELESS)
如果設定此修正符,模式中的字元將同時匹配大小寫字母。
m(PCRE_MULTILINE)
默認情況下,PCRE 將目標字元串作為單一的一「行」字元所組成的(甚至其中包含有換行符也是如此)。「行起始」元字元(^)僅僅匹配字元串的起始,「行結束」元字元($)僅僅匹配字元串的結束,或者最後一個字元是換行符時其前面(除非設定了 D 修正符)。這和 Perl 是一樣的。
當設定了此修正符,「行起始」和「行結束」除了匹配整個字元串開頭和結束外,還分別匹配其中的換行符的之後和之前。這和 Perl 的 /m 修正符是等效的。如果目標字元串中沒有「\n」字元或者模式中沒有 ^ 或 $,則設定此修正符沒有任何效果。
s(PCRE_DOTALL)
如果設定了此修正符,模式中的圓點元字元(.)匹配所有的字元,包括換行符。沒有此設定的話,則不包括換行符。這和 Perl 的 /s 修正符是等效的。排除字元類例如 [^a] 總是匹配換行符的,無論是否設定了此修正符。
x(PCRE_EXTENDED)
如果設定了此修正符,模式中的空白字元除了被轉義的或在字元類中的以外完全被忽略,在未轉義的字元類之外的 # 以及下一個換行符之間的所有字元,包括兩頭,也都被忽略。這和 Perl 的 /x 修正符是等效的,使得可以在復雜的模式中加入注釋。然而注意,這僅適用於數據字元。空白字元可能永遠不會出現於模式中的特殊字元序列,例如引入條件子模式的序列 (?( 中間。
e
如果設定了此修正符,preg_replace() 在替換字元串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,並用其結果來替換所搜索的字元串。
只有 preg_replace() 使用此修正符,其它 PCRE 函數將忽略之。
注意: 本修正符在 PHP3 中不可用。
A(PCRE_ANCHORED)
如果設定了此修正符,模式被強制為「anchored」,即強制僅從目標字元串的開頭開始匹配。此效果也可以通過適當的模式本身來實現(在 Perl 中實現的唯一方法)。
D(PCRE_DOLLAR_ENDONLY)
如果設定了此修正符,模式中的美元元字元僅匹配目標字元串的結尾。沒有此選項時,如果最後一個字元是換行符的話,美元符號也會匹配此字元之前(但不會匹配任何其它換行符之前)。如果設定了 m 修正符則忽略此選項。Perl 中沒有與其等價的修正符。
S
當一個模式將被使用若干次時,為加速匹配起見值得先對其進行分析。如果設定了此修正符則會進行額外的分析。目前,分析一個模式僅對沒有單一固定起始字元的 non-anchored 模式有用。
U(PCRE_UNGREEDY)
本修正符反轉了匹配數量的值使其不是默認的重復,而變成在後面跟上「?」才變得重復。這和 Perl 不兼容。也可以通過在模式之中設定 (?U) 修正符或者在數量符之後跟一個問號(如 .*?)來啟用此選項。
X(PCRE_EXTRA)
此修正符啟用了一個 PCRE 中與 Perl 不兼容的額外功能。模式中的任何反斜線後面跟上一個沒有特殊意義的字母導致一個錯誤,從而保留此組合以備將來擴充。默認情況下,和 Perl 一樣,一個反斜線後面跟一個沒有特殊意義的字母被當成該字母本身。當前沒有其它特性受此修正符控制。
u(PCRE_UTF8)
此修正符啟用了一個 PCRE 中與 Perl 不兼容的額外功能。模式字元串被當成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起開始檢查模式的 UTF-8 合法性。
⑷ php正則表達式
$pattern = "/\b([a-z]+) \1\b/i";
雙引號換成單引號
⑸ 掌握PHP 中的正則表達式,第 2 部分: 如何在 PHP 中處理文本
雖然術語數據 和信息 可以互換使用,但是兩者之間有很大的差別。數據是有據可依的。溫度列表、近期銷售狀況說明或者庫存零部件清單,這些都是數據。信息含有一定見解。天氣預報、損益表和銷售趨勢屬於信息。數據是由若干個 1 和 0 表示,而信息則經由人腦分析得出。數據和信息之間是軟體應用程序:引擎將把數據和信息來回轉換。例如,如果在線購買圖書,購書應用程序將把信息 —— 書名、身份信息、銀行帳號信息 —— 轉換為數據,例如訂單號、售價、信用卡交易詳細信息和對存貨清單的調整。類似地,購書應用程序將把數據再轉換為倉庫提貨請求、運輸標簽和跟蹤編號等完成銷售所需的信息。當然,創建應用程序的復雜度與其影響的轉換直接成正比。Web 站點留言本十分簡單,它把姓名和地址轉換為資料庫中的欄位。同時,在線商店十分復雜,它將把各類信息轉換為業務數據模型並把數據轉換為信息來推動決策。編程的藝術在於對數據和信息的熟練處理 —— 類似於在明暗處理中捕捉亮色的技能。如第1 部分 中所述,regex 是處理數據的最強大工具之一。使用簡明的簡寫方式,regex 說明了數據的格式並分解數據。例如,您可以使用下面的 regex 處理所有攝氏或華氏溫度:/^([+-]?[0-9]+)([CF])$/。regex 將匹配行的開頭(由脫字元號 ^ 表示),後接一個正號,一個負號,或者兩者都不是 ([+-]?),後接一個整數 ([0-9]+),數值范圍限定符 —— 攝氏或華氏 ([CF])—— 並在行尾(用美元符號 $ 表示)終止。在溫度 regex 中,行開頭和行結尾操作符是兩個零寬度斷言 示例,或者匹配位置而非文字。括弧也不是文字。相反,嵌入到括弧內的模式將捕捉匹配模式的文本。因此,如果文本匹配了整個模式,第一組括弧將生成表示一個正整數或負整數的的字元串,例如 +49。第二組括弧將生成字母 C 或F。 第1 部分介紹了 regex 的概念和可用於比較文本與模式和提取匹配的 PHP 函數。現在我將更深入地研究 regex 並查看一些高級操作符和處理方法。(再次)使用括弧在大多數情況下,使用一組括弧可以定義子模式和捕捉匹配子模式的文本。但是,括弧不需要捕捉子模式。正如在復雜的數學公式中,您可以簡單地使用括弧來給術語分組。下面是一個示例。您能否說出它匹配哪類數據? /[-a-z0-9]+(?:\.[-a-z0-9]+)*\.(?:com|e|info)/i 您可能已經預料到此 regex 將匹配主機名(雖然只在 .com、.e 和 .info 這幾個域中)。差別是添加了 ?:。子模式限定符 ?: 將禁用捕捉,留下括弧來闡明操作的優先次序。例如,在這里,短句 (?:\.[-a-z0-9]+)* 將匹配零個或多個字元串實例(例如 「.ibm」)。類似地,短句 \.(?:com|e|info) 表示句點,後接字元串 com、e 或info 中的任意一個。禁用捕捉可能看似毫無意義,直至您意識到捕捉需要額外的處理。如果代碼將處理大量數據,則忽略捕捉可能是有意義的。此外,如果 regex 特別復雜,禁用某些子模式中的捕捉可以更輕松地提取真正感興趣的子模式。註:使用regex 末尾的 i 修飾語可以使模式內的所有匹配都不區分大小寫。因此,子集 a-z 將匹配所有字母,而不區分大小寫。PHP 將提供其他子模式修飾詞。使用第 1 部分中提供的 regex 測試 jig(如 清單1 所示),將針對候選字元串 「EDU」、「e」 和「E」 匹配 regex ((?i)e)。如果子模式以修飾詞 (?i) 為開頭,則在子模式中進行匹配不區分大小寫。只要子模式結束,區分大小寫將被重新啟用(將此修飾詞與上面的 /.../i 修飾詞相比較,後者應用於整個模式)。清單1. 簡單的 regex 測試實用程序 另一個有用的子模式修飾詞是 (?x)。它允許您在子模式中嵌入空白,使 regex 更易讀。因而,子模式 ((?x) e | com | info)(請注意備用操作符之間的空格,這些空格是為了易讀性而添加的)與 (e|com|info) 相同。您可以使用全局修飾詞 /.../x 在整個 regex 中嵌入空白和注釋,如下所示:清單2. 嵌入空白和注釋 $matches = preg_grep( "/ [- a-z 0-9]+ # machine name (?: \. [- a-z 0-9]+)* # subdomains \. (?: com | e | info)# domain /xi", $words ); 正如您所見,還可以根據需要組合修飾詞。另外,如果需要在使用 (?x) 時匹配空格,那麼,使用元字元 \s 來匹配所有空格字元或使用 \ (反斜杠後接空格)來匹配單個空格,如 ((?x) hello \ there)。回頁首其他應用regex 的大量應用都是驗證或分解存儲為存儲庫中的數據或由應用程序立即執行的各個小塊的輸入。處理表單中的欄位、解析 XML 代碼以及解釋協議都是典型應用。regex 的另一個應用是格式化、規范化或提高數據的可讀性。格式化不是使用 regex 查找和提取文本,而是使用 regex 查找並在正確位置插入文本。下面是一個有用的格式化應用程序。假定 Web 表單把按照美元計算的薪金提交給應用程序。由於把薪金存儲為整數,因此應用程序必須先去掉所粘貼數據中的標點符號,然後再保存。但是,在從存儲庫中檢索出數據時,則需要使用逗號重新設定數據的格式使其具有可讀性。下面顯示了一個用於把美元金額轉換為數字的簡單 PHP 調用。清單3. 把美元金額轉換為數字 $salary = preg_replace( "/[\$\s,]/", '', $_REQUEST[ 'salary' ] ); if ( is_numeric( $salary ) ) { // persist the data } else { // error } 調用preg_replace() 函數將用空字元串替換美元符號、所有空格和每個逗號,生成認為是整數的內容。如果調用 is_numeric() 對輸入進行了驗證,則可以存儲數據。接下來,讓我們反向操作輸出帶有貨幣符號和用於分隔百、千、百萬的逗號的數字。您可以編寫代碼來查找這些數字單元,也可以使用向前查找 和向後查找 在正確位置上插入逗號。子模式修飾詞 ? "Wicked" [1] => "Mirror, Mirror." ) regex ".*?" 變為匹配一個引號,後接剛好足夠的 字元,後接一個引號。但是,使用 * 操作符有時可能太懶惰。例如,採用以下代碼片段。它將生成什麼輸出?清單7. 簡單的 regex 測試實用程序 if (preg_match( "/([0-9]*)/", "-123", $matches ) ) { print_r( $matches ); } 猜測輸出是什麼?「123」?「1」?沒有輸出?實際上,輸出是 Array ( [0] => [1] => ),表示找到一個匹配,但是未捕捉到任何內容。為什麼?回想一下操作符 * 可以匹配零次或多次。在這里,表達式 [0-9]* 針對字元串開頭匹配零次,隨後停止處理。要解決此問題,請添加零寬度斷言來錨定匹配,這將強制 regex 引擎繼續進行匹配;/([0-9]*\b/ 就可解決問題。回頁首更多提示和技巧regex 可以解決簡單或復雜的文本處理問題。首先掌握一些操作符,隨著經驗逐漸豐富,您可以進一步擴展詞彙表。要立即開始使用,請參考下面這些提示和技巧。用字元類實現可移植的 regex您已經看到過匹配所有空格字元的元字元,例如 \s。此外,許多 regex 實現都支持更易於跨多種編寫語言使用和移植的預定義字元類。例如,字元類 [:punct:] 表示當前語言環境中的所有標點字元。您可以使用 [:digit:] 代替[0-9],並且 [:alpha:] 是比[-a-zA-Z0-9_] 更具有可移植性的替代者。例如,您可以使用以下語句移除字元串中的所有標點符號: $clean = preg_replace( "/[[:punct:]]/", '', $string ); 使用字元類比清楚說明所有標點符號更簡潔。要獲得字元類的完整列表,請參閱適用於您的 PHP 版本的文檔。排除不需要查找的內容與將逗號分隔的值 (CSV) 轉換為用製表符分隔的數據一樣,列出不 需要匹配的內容有時更容易也更精確。以脫字元號 (^) 為開頭的集合將匹配集合中不包括的所有字元。例如,您可以使用正則表達式 /[2-9][0-9]{2}[2-9][0-9]{2}[0-9]{4}/ 來驗證美國電話號碼。使用排除集合,可以把 regex 編寫為更顯式的 /[^01][0-9]{2}[^01][0-9]{2}[0-9]{4}/。兩個 regex 都可以正常運行,但是顯然後者意圖更加明顯。跳過換行符如果輸入跨度多行,則使用典型的 regex 是不夠的,因為掃描將在 $ 所指示的換行符處終止。但是,如果使用 s 或m 修飾詞,regex 引擎將按照不同的方式處理輸入。前者將把字元串處理為單行,強制用點匹配換行符(它通常不這樣做)。後者將把字元串處理為多行,其中 ^ 和$ 將分別匹配每行的開頭和結尾。下面是一個示例:如果設置 $string = "Hello,\nthere";,則語句 preg_match( "/.*/s", $string, $matches) 將把$matches[0] 設為Hello,\nthere(刪除 s 將生成 Hello)。正則表達式幾乎無所不能,也許惟一的限制因素就是您的想像力和創造力了。參考資料 學習 您可以參閱本文在 developerWorks 全球站點上的 英文原文。
閱讀「掌握PHP 中的正則表達式」 系列中的其他文章。
PHP.net 是PHP 開發者的重要資源。
查閱「PHP 推薦讀物列表」。
瀏覽developerWorks 上的全部 PHP 文章和PHP 教程。
查看IBM developerWorks 的 PHP 項目資源 擴展PHP 技巧。
收聽針對軟體開發人員的有趣訪談和討論,一定要訪問 developerWorks podcast。
要將資料庫與 PHP 結合使用?查看 Zend Core for IBM,它是一個無縫的、可以立即使用、易於安裝、支持 IBM DB2 V9 的 PHP 開發和生產環境。
隨時關注 developerWorks 的 技術事件和網路廣播。
查閱最近將在全球舉辦的面向 IBM 開放源碼開發人員的研討會、交易展覽、網路廣播和其他 活動。
訪問developerWorks 開放源碼專區,獲得豐富的 how-to 信息、工具和項目更新,幫助您用開放源碼技術進行開發,並與 IBM 產品結合使用。
查看免費的 developerWorks On demand demo 觀看並了解 IBM 及開源技術和產品功能。
獲得產品和技術使用IBM 試用軟體,改進您的下一個開發項目,這些軟體可以通過下載或從 DVD 中獲得。
下載IBM 產品評估版,並開始使用 DB2�0�3、Lotus�0�3、Rational�0�3、Tivoli�0�3 和 WebSphere�0�3 的應用程序開發工具和中間件產品。
討論參與developerWorks blog 並加入 developerWorks 社區。
關於作者Martin Streicher 是 McClatchy Interactive 的首席技術官、Linux Magazine 的主編、Web 開發人員以及 developerWorks 的定期投稿者。他畢業於普渡大學並獲得計算機科學碩士學位,從 1986 年起他一直從事類 UNIX 系統的編程工作。關閉[x]關於報告濫用的幫助報告濫用謝謝! 此內容已經標識給管理員注意。關閉[x]關於報告濫用的幫助報告濫用報告濫用提交失敗。 請稍後重試。關閉[x]developerWorks:登錄IBM ID:需要一個 IBM ID?忘記IBM ID?密碼:忘記密碼?更改您的密碼 保持登錄。單擊提交則表示您同意developerWorks 的條款和條件。 使用條款 當您初次登錄到 developerWorks 時,將會為您創建一份概要信息。您在developerWorks 概要信息中選擇公開的信息將公開顯示給其他人,但您可以隨時修改這些信息的顯示狀態。您的姓名(除非選擇隱藏)和昵稱將和您在 developerWorks 發布的內容一同顯示。所有提交的信息確保安全。關閉[x]請選擇您的昵稱:當您初次登錄到 developerWorks 時,將會為您創建一份概要信息,您需要指定一個昵稱。您的昵稱將和您在 developerWorks 發布的內容顯示在一起。昵稱長度在 3 至 31 個字元之間。 您的昵稱在 developerWorks 社區中必須是唯一的,並且出於隱私保護的原因,不能是您的電子郵件地址。昵稱:(長度在 3 至 31 個字元之間)單擊提交則表示您同意developerWorks 的條款和條件。 使用條款. 所有提交的信息確保安全。為本文評分評論回頁首
⑹ php正則表達式eregi()
PHP中的正則式使用
PHP被大量的應用於Web的後台CGI開發,通常是在用戶數據數據之後得出某種結果,但是如果用戶輸入的數據不正確,就會出現問題,比如說某人的生日是」2月30日」!那應該怎麼樣來檢驗暑假是否正確呢? 在PHP中加入了正則表達式的支持,讓我們可以十分方便的進行數據匹配。
2 什麼是正則表達式:
簡單的說,正則表達式是一種可以用於模式匹配和替換的強大工具。在幾乎所有的基於UNIX/LINUX系統的軟體工具中找到正則表達式的痕跡,例如:Perl或PHP腳本語言。此外,javaScript這種客戶端的腳本語言也提供了對正則表達式的支持,現在正則表達式已經成為了一個通用的概念和工具,被各類技術人員所廣泛使用。
在某個Linux網站上面有這樣的話:」如果你問一下Linux愛好者最喜歡什麼,他可能會回答正則表達式;如果你問他最害怕什麼,除了繁瑣的安裝配置外他肯定會說正則表達式。」
正如上面說的,正則表達式看起來非常復雜,讓人害怕,大多數的PHP初學者都會跳過這里,繼續下面的學習,但是PHP中的正則表達式有著可以利用模式匹配找到符合條件的字元串、判斷字元串是否合乎條件或者用指定的字元串來替代符合條件的字元串等強大的功能,不學實在太可惜了……
3 正則表達式的基本語法:
一個正則表達式,分為三個部分:分隔符,表達式和修飾符。
分隔符可以是除了特殊字元以外的任何字元(比如」/ !」等等),常用的分隔符是」/」。表達式由一些特殊字元(特殊字元詳見下面)和非特殊的字元串組成,比如」[a-z0-9_-]+@[a-z0-9_-.]+」可以匹配一個簡單的電子郵件字元串。修飾符是用來開啟或者關閉某種功能/模式。下面就是一個完整的正則表達式的例子:
/hello.+?hello/is
上面的正則表達式」/」就是分隔符,兩個」/」之間的就是表達式,第二個」/」後面的字元串」is」就是修飾符。
在表達式中如果含有分隔符,那麼就需要使用轉義符號」",比如」/hello.+?/hello/is」。轉義符號除了用於分隔符外還可以執行特殊字元,全部由字母構成的特殊字元都需要」"來轉義,比如」d」代表全體數字。
4 正則表達式的特殊字元:
正則表達式中的特殊字元分為元字元、定位字元等等。
元字元是正則表達式中一類有特殊意義的字元,用來描述其前導字元(即元字元前面的字元)在被匹配的對象中出現的方式。元字元本身是一個個單一的字元,但是不同或者相同的元字元組合起來可以構成大的元字元。
元字元:
大括弧:大括弧用來精確指定匹配元字元出現的次數,例如」/pre{1,5}/」表示匹配的對象可以是」pre」、」pree」、」preeeee」這樣在」pr」後面出現1個到5個」e」的字元串。或者」/pre{,5}/」代表pre出現0此到5次之間。
加號:」+」字元用來匹配元字元前的字元出現一次或者多次。例如」/ac+/」表示被匹配的對象可以是」act」、」account」、」acccc」等在」a」後面出現一個或者多個」c」的字元串。」+」相當於」{1,}」。
星號:」*」字元用來匹配元字元前的字元出現零次或者多次。例如」/ac*/」表示被匹配的對象可以是」app」、」acp」、」accp」等在」a」後面出現零個或者多個」c」的字元串。」*」相當於」{0,}」。
問號:」?」字元用來匹配元字元前的字元出現零次或者1次。例如」/ac?/」表示匹配的對象可以是」a」、」acp」、」acwp」這樣在」a」後面出現零個或者1個」c」的字元串。」?」在正則表達式中還有一個非常重要的作用,即」貪婪模式」。
還有兩個很重要的特殊字元就是」[ ]「。他們可以匹配」[]「之中出現過的字元,比如」/[az]/」可以匹配單個字元」a」或者」z」;如果把上面的表達式改成這樣」/[a-z]/」,就可以匹配任何單個小寫字母,比如」a」、」b」等等。
如果在」[]「中出現了」^」,代表本表達式不匹配」[]「內出現的字元,比如」/[^a-z]/」不匹配任何小寫字母!並且正則表達式給出了幾種」[]「的默認值:
[:alpha:]:匹配任何字母
[:alnum:]:匹配任何字母和數字
[:digit:]:匹配任何數字
[:space:]:匹配空格符
[:upper:]:匹配任何大寫字母
[:lower:]:匹配任何小寫字母
[:punct:]:匹配任何標點符號
[:xdigit:]:匹配任何16進制數字
另外下面這些特殊字元在轉義符號」"轉義後代表的含義如下:
s:匹配單個的空格符
S:用於匹配除單個空格符之外的所有字元。
d:用於匹配從0到9的數字,相當於」/[0-9]/」。
w:用於匹配字母,數字或下劃線字元,相當於」/[a-zA-Z0-9_]/」。
W:用於匹配所有與w不匹配的字元,相當於」/[^a-zA-Z0-9_]/」。
D:用於匹配任何非10進制的數字字元。
.:用於匹配除換行符之外的所有字元,如果經過修飾符」s」的修飾,」.」可以代表任意字元。
利用上面的特殊字元可以很方便的表達一些比較繁瑣的模式匹配。例如」/d0000/」利用上面的正則表達式可以匹配萬以上,十萬一下的整數字元串。
定位字元:
定位字元是正則表達式中又一類非常重要的字元,它的主要作用是用於對字元在匹配對象中的位置進行描述。
^:表示匹配的模式出現在匹配對象的開頭(和在」[]「裡面不同)
$:表示匹配的模式出現在匹配對象的末尾
空格:表示匹配的模式出現在開始和結尾的兩個邊界之一
「/^he/」:可以匹配以」he」字元開頭的字元串,比如hello、height等等;
「/he$/」:可以匹配以」he」字元結尾的字元串即she等;
「/ he/」:空格開頭,和^的作用一樣,匹配以he開頭的字元串;
「/he /」:空格結束,和$的作用一樣,匹配以he結尾的字元串;
「/^he$/」:表示只和字元串」he」匹配。
括弧:
正則表達式除了可以用戶匹配,還可以用括弧」()」來記錄需要的信息,儲存起來,給後面的表達式讀取。比如:
/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(.[a-zA-Z0-9_-])$/
就是記錄郵件地址的用戶名,和郵件地址的伺服器地址(形式為[email protected]之類的),在後面如果想要讀取記錄下來的字元串,只是需要用」轉義符+記錄的次序」來讀取。比如」1〃就相當於第一個」[a-zA-Z0-9_-]+」,」2〃相當於第二個([a-zA-Z0-9_-]+),」3〃就是第三個(.[a-zA-Z0-9_-])。但是在PHP中,」"是一個特殊的字元,需要轉義,所以」"到了PHP的表達式中就應該寫成」1〃。
其他特殊符號:
「|」:或符號」|」和PHP裡面的或一樣,不過是一個」|」,而不是PHP的兩個」||」!意思就是可以是某個字元或者另一個字元串,比如」/abcd|dcba/」可能匹配」abcd」或者」dcba」。
5 貪婪模式:
前面在元字元中提到過」?」還有一個重要的作用,即」貪婪模式」,什麼是
⑺ PHP 正則表達式函數庫
在PHP中有兩套正則表達式函數庫,兩者功能相似,只是執行效率略有差異:
一套是由PCRE(Perl Compatible Regular Expression)庫提供的。使用「preg_」為前綴命名的函數;
一套由POSIX(Portable Operating System Interface of Unix )擴展提供的(PHP默認)。使用以「ereg_」為前綴命名的函數;
PHP中,正則表達式有三個作用:
匹配,也常常用於從字元串中析取信息。
用新文本代替匹配文本。
將一個字元串拆分為一組更小的信息塊。
一個正則表達式中至少包含一個原子。
原子(普通字元,如英文字元)
元字元(有特殊功用的字元)
模式修正字元(對正則表達式語義的修正)
原子(Atom)
單個字元、數字,如a~z,A~Z,0~9。
模式單元,如(ABC)可以理解為由多個原子組成的大的原子。
原子表,如 。
重新使用的模式單元,如:\\1
普通轉義字元,如:\d, \D, \w
轉義元字元,如:\*,\.
POSIX正則表達式
POSIX正則表達式全稱為Portable Operating System Interface of Unix,意為UNIX可移植操作系實現介面。
http://www.33dir.com/news/2/2168.html
構造POSIX正則表達式的方法和創建數學表達式的方法一樣,也就是用多種元字元與操作符將小的表達式結合在一起來創建更大的表達式。
⑻ php 正則表達式 貪婪模式怎麼寫
MTracer正則表達式驗證工具,一般好用,我是只下載了個這個玩了一會覺得上手挺簡單的,就推薦下。正則表達式工具下載地址:MTracer.rar(首先打開工具,在右邊有上下兩個輸入框,上面那個是輸入正則的,下面那個是輸入要匹配字元串的,上下內容輸入好以後,就可以單擊匹配按鈕了,如果覺得匹配ok的話,就可以直接單擊上面菜單的代碼生成,來生成你要的C#代碼,java代碼,Script代碼等等)比如我要匹配兩個標簽里的所有東西如asdawdsadwdasdmwioasdasd我要匹配兩個Div之間的東西,那麼就應該寫[/S/s]*注意,你用request對象去請求回來的頁面是帶有/r 、/n 、/t這些標簽的,所有你要學會如何去表示這些標簽,另外捕獲標簽的時候,你是否要最大限度的匹配還是要最小限度的去匹配,下面就說明下這兩種模式 貪婪模式 和 非貪婪模式 :在正則表達式的匹配次數後面再添加一個 ? 表示 非貪婪模式
常用的匹配次數有 *、{m.n}、+貪婪模式:表達式在可匹配可不匹配的時候,也是盡可能的 "要匹配"。
非貪婪模式表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的 "不匹配"。
如bdxxx taaaa
表達式A1: .*
結果: 匹配1次
表達式A2:.*?
結果:匹配2次
表達式B1:[/w/s/]{1,}?
結果:匹配2次去掉問號結果:匹配1次同理 將{1,}改+ 也可以得到相同的匹配結果,好了今天就寫這么多了,哪天有空了再寫寫
-
⑼ PHP正則表達式到底怎麼用
javascript的正則表達式和php正則表達式在細節上是不同的
使用php的正則去匹配郵箱,可以用網路搜索關鍵字:
"php 正則表達式 郵箱"
參考這個:
$email = "[email protected]";
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}$/',$email)) {
echo "Your email is ok.";
} else {
echo "Wrong email address format";
}