Time of Update: 2016-11-21
當使用 PCRE 函數的時候,模式需要由分隔字元閉合包裹。分隔字元可以使任意非字母數字、非反斜線、非空白字元。經常使用的分隔字元是正斜線(/)、hash符號(#) 以及取反符號(~)。下面的例子都是使用合法分隔字元的模式。/foo bar/#^[^0-9]$#+php+%[a-zA-Z0-9_-]%如果分隔字元需要在模式內進行匹配,它必須使用反斜線進行轉義。如果分隔字元經常在 模式內出現,
Time of Update: 2016-11-21
Regex的威力源於它可以在模式中擁有選擇和重複的能力。 一些字元被賦予特殊的涵義,使其不再單純的代表自己,模式中的這種有特殊涵義的編碼字元 稱為 元字元。共有兩種不同的元字元:一種是可以在模式中方括弧外任何地方使用的,另外一種 是需要在方括弧內使用的。
Time of Update: 2016-11-21
反斜線有多種用法。首先,如果緊接著是一個非字母數字字元,表明取消 該字元所代表的特殊涵義。這種將反斜線作為逸出字元的用法在字元類 內部和外部都可用。比如,如果你希望匹配一個 "*" 字元,就需要在模式中寫為 "\*"。 這適用於一個字元在不進行轉義會有特殊含義的情況下。 但是, 對於非數字字母的字元,總是在需要其進行原文匹配的時候在它前面增加一個反斜線, 來聲明它代表自己,這是安全的。如果要匹配一個反斜線,那麼在模式中使用
Time of Update: 2016-11-21
自從 PHP 4.4.0 和 5.1.0, 三個額外的逸出序列在選用 UTF-8模式時用於匹配通用字元類型。他們是:\p{xx}一個有屬性 xx 的字元\P{xx}一個沒有屬性 xx 的字元\X一個擴充的 Unicode 字元上面 xx 代表的屬性名稱用於限制 Unicode 通常的類別屬性。 每個字元都有一個這樣的確定的屬性,通過兩個縮寫的字母指定。 為了與 perl 相容, 可以在左花括弧 { 後面增加 ^ 表示取反。比如: \p{^Lu} 就等同於 \P{Lu}。如果通過 \p 或 \P
Time of Update: 2016-11-21
錨在一個字元類外面,在預設匹配模式下, ^ 是一個斷言當前匹配點位於目標字串開始處的斷言。在一個字元類內部, ^ 表明這個字元類中描述的字元取反(詳見下文)。^ 並不一定要是模式的第一個字元, 但是如果處於某個可選分支時, 它應該是該分支的首字元。如果所有選擇分支都以 ^ 開頭,這就是說, 如果模式限制為只匹配目標的開頭, 它被稱為是一個 ”緊固” 模式。(同樣也有其他方式可以構造出緊固模式)$ 是用於斷言當前匹配點位於目標字串末尾,
Time of Update: 2016-11-21
字元類(方括弧)左方括弧開始一個字元類的描述,並以方中括弧結束。 單獨的一個右方括弧沒有特殊含義。如果一個右方括弧需要作為一個字元類中的成員, 那麼可以將它寫在字元類的首字元處(如果使用了^取反, 那麼是第二個)或者使用轉義符。一個字元類在目標字串中匹配一個單獨的字元; 該字元必須是字元類中定義的字元集合的其中一個, 除非使用了 ^ 對字元類取反。 如果^需要作為一個字元類的成員,確保它不是該字元類的首字元, 或者對其進行轉義即可。例如,字元類[aeiou]匹配所有的小寫母音字母,
Time of Update: 2016-11-21
PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_UNGREEDY,PCRE_EXTRA, PCRE_EXTENDED and PCRE_DUPNAMES 等模式修飾符設定可以在模式內部通過一個 perl 選項字元序列來設定, 文法為:(?修飾符),可用的修飾符有:Internal option lettersi for PCRE_CASELESS m for PCRE_MULTILINE s for
Time of Update: 2016-11-21
子組通過圓括弧分隔界定,並且它們可以嵌套。 將一個模式中的一部分標記為子組(子模式)主要是來做兩件事情:將可選分支局部化。比如,模式cat(arcat|erpillar|)匹配 ”cat”, “cataract”, “caterpillar” 中的一個,如果沒有圓括弧的話,它匹配的則是 ”cataract”, “erpillar” 以及Null 字元串。將子組設定為捕獲子組(向上面定義的). 當整個模式比對後, 目標字串中匹配子組的部分將會通過 pcre_exec()() 的 ovector
Time of Update: 2016-11-21
重複次數是通過量詞指定的,可以緊跟在下面元素之後:單獨的字元, 可以是經過轉義的元字元。字元類後向引用(參加下一部分)子組(除非它是一個斷言)一般的重複量詞指定了一個最小數值和一個最大數值的匹配次數, 通過花括弧包裹兩個數字,兩個數字之間用逗號隔開的文法定義。 兩個數值都必須小於 65536, 並且第一個數字必須小於等於第二個。 比如: z{2,4} 匹配 ”zz”, “zzz”, “zzzz”。 單個的右花括弧不是特殊字元。 如果第二個數字被省略,但是逗號仍然存在,就代表沒有上限;
Time of Update: 2016-11-21
在PHP官方文檔中,曾經指出最好不要再結尾添加?>結束標記。但我們編程的習慣和使用的IDE都會為我們自動建立php結束標記?>。這個標記使用在正常情況下是不影響程式的啟動並執行。尤其在早期的php4中,這種標記使用不當也不會影響最後的輸出。但我最近遇到了php指令碼結束標記照成頁面無法顯示的問題。首先wap最終的輸出時xml檔案,如果xml檔案格式有問題,則無法顯示結果。在多次檢查輸出過程發現並沒有問題,同樣的代碼再另一台測試機上顯示也無問題。通過firebug查看,最終的輸出主
Time of Update: 2016-11-21
一個斷言就是一個對當前匹配位置之前或之後的字元的測試, 它不會實際消耗任何字元。簡單的斷言代碼有\b、\B、 \A、 \Z、\z、 ^、$ 等等。 更加複雜的斷言以子組的方式編碼。 它有兩種類型:前瞻斷言(從當前位置向前測試)和後瞻斷言(從當前位置向後測試)。一個斷言子組的匹配還是通過普通方式進行的, 不同在於它不會導致當前的匹配點發生改變。 前瞻斷言中的正面斷言(斷言此匹配為真)以 ”(?=” 開始,消極斷言以 ”(?!” 開頭。比如, \w+(?=;)
Time of Update: 2016-11-21
對於同時有最大值和最小值量詞限制的重複項, 在匹配失敗後, 緊接著會以另外一個重複次數重新評估是否能使模式比對。 當模式的作者明確知道執行上沒有問題時, 通過改變匹配的行為或者使其更早的匹配失敗以阻止這種行為是很有用的。考慮一個例子,模式 \d+foo 應用到目標行 123456bar 時:在匹配了 6 個數字後匹配 ”foo” 時失敗,通常的行為時匹配器嘗試使 \d+ 只匹配 5 個數字, 只匹配 4 個數字,在最終失敗之前依次進行嘗試。 一次性子組提供了一種特殊的意義,
Time of Update: 2016-11-21
可以使匹配器根據一個斷言的結果, 或者之前的一個捕獲子組是否匹配來條件式的匹配一個子組或者在兩個可選子組中選擇。 條件子組的兩種文法如下:(?(condition)yes-pattern)(?(condition)yes-pattern|no-pattern)如果條件滿足,使用 yes-pattern,其他情況使用 no-pattern(如果指定了)。 如果有超過 2 個的可選子組,會產生給一個編譯期錯誤。條件一共有兩種。如果在(condition)的括弧內是數字組成的文本,
Time of Update: 2016-11-21
注釋字元序列(?#標記開始一個注釋直到遇到一個右括弧。不允許嵌套括弧。 注釋中的字元不會作為模式的一部分參與匹配。如果設定了 PCRE_EXTENDED 選項, 一個字元類外部的未轉義的 # 字元就代表本行剩餘部分為注釋。遞迴模式考慮匹配圓括弧內字串的問題,允許無限嵌套括弧。如果不使用遞迴, 最好的方式是使用一個模式比對固定深度的嵌套。它不能處理任意深度的嵌套。 perl 5.6 提供了一個實驗性的功能允許Regex遞迴。 特殊項 (?R) 提供了遞迴的這種特殊用法。
Time of Update: 2016-11-21
下面列出了當前可用的 PCRE 修飾符。括弧中提到的名字是 PCRE 內部這些修飾符的名稱。 模式修飾符中的空格,分行符號會被忽略,其他字元會導致錯誤。i (PCRE_CASELESS)如果設定了這個修飾符,模式中的字母會進行大小寫不敏感匹配。m (PCRE_MULTILINE)預設情況下,PCRE 認為目標字串是由單行字元組成的(然而實際上它可能會包含多行), "行首"元字元 (^) 僅匹配字串的開始位置, 而"行末"元字元 ($) 僅匹配字串末尾,
Time of Update: 2016-11-21
自 PHP 5.3.0起, POSIX Regex擴充被廢棄。在 POSIX 正則和 PCRE 正則之間有一些不同,本文列出了在轉向PCRE 時最顯著的需要知道的不同點。PCRE 函數需要模式以分隔字元閉合。不像POSIX,PCRE 擴充沒有專門用於大小寫不敏感匹配的函數。取而代之的是,支援使用i (PCRE_CASELESS) 模式修飾符完成同樣的工作。 其他模式修飾符同樣可用於改變匹配策略。POSIX 函數從最左面開始尋找最長的匹配,但是 PCRE 在第一個合法匹配後停止。如果字串
Time of Update: 2016-11-21
POSIX Regex函數ereg_replace — Regex替換ereg — Regex匹配eregi_replace — 不區分大小寫Regex替換eregi — 不區分大小寫Regex匹配split — 用Regex將字串分割到數組中spliti — 用Regex不區分大小寫將字串分割到數組中sql_regcase — 產生用於不區分大小的匹配的Regex使用樣本:<?php// Returns true if "abc" is found anywhere
Time of Update: 2016-11-21
一、概述及安裝這些函數允許你通過不同的方式來使用和運算元組。數組是儲存、管理和操作變數必不可少的工具。PHP 支援簡單數組和多維陣列,數組可由使用者自己建立也可以由其它函數建立。有很多特殊的資料庫處理函數可以從資料庫查詢中返回數組以及一些返回數組的函數。請參考有關數組的章節來詳細瞭解 PHP 中數組是如何?及使用的。使用這些函數不需要安裝,它們是 PHP 核心的一部分。二、數組函數大全array_change_key_case — 返回字串鍵名全為小寫或大寫的數組array_chunk —
Time of Update: 2016-11-21
一、概述和安裝這些函數允許你獲得類和對象執行個體的相關資訊。 你可以擷取對象所屬的類名,也可以是它的成員屬性和方法。 通過使用這些函數,你不僅可以找到對象和類的關係,也可以是它們的繼承關係(例如,對象類繼承自哪個類)。請參考物件導向相關章節來查看在 PHP 裡,對象和類如何?和使用的詳細描述。使用這些函數不需要安裝,它們是 PHP 核心的一部分。二、類與對象函數大全__autoload — 嘗試載入未定義的類call_user_method_array — 調用一個使用者方法,同時傳遞參數數組(
Time of Update: 2016-11-21
概念觀察者模式屬於行為模式,是定義對象間的一種一對多的依賴關係,以便當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並自動重新整理。當一個對象狀態發生改變後,會影響到其他幾個對象的改變,這時候可以用觀察者模式。觀察者模式符合介面隔離原則,實現了對象之間的鬆散耦合。別名發布-訂閱<Subscribe>模式模型-視圖<View>模式源-收聽者<Listener>模式從屬者模式角色抽象主題(Subject):它把所有觀察者對象的引用儲存到一個聚集裡,每個主題