php修正符
A. 為什麼在正則不加模式修正符的時候,php去匹配的中文字元會是亂碼的
此修正符啟用了一個 PCRE 中與 Perl 不兼容的額外功能。模式字元串被當成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起開始檢查模式的 UTF-8 合法性。
你懂么?如果還不懂的話多,去後盾人看下教學視頻非常有幫助。
B. php中模式修正符 \1 是什麼意思
Z 匹配必須出現在字元串的末尾或出現在字元串末尾的 \n 之前。
\z 匹配必須出現在僅字元串的末尾。
並且它們都不受多行模式及點模式的影響。
例如:在匹配如多行文本時。像這個你可以看看資料,後盾人還不錯,你可以去試試,也不會吃虧
C. php中正則表達式中模式修正符號Z,意思是強制以什麼結尾。為什麼在php中不能用
\Z 匹配必須出現在字元串的末尾或出現在字元串末尾的 \n 之前。
\z 匹配必須出現在僅字元串的末尾。
並且它們都不受多行模式及點模式的影響。
例如:在匹配如多行文本時
11dfdf
22sdff
33dfdf
[此處是一空行]
\w+\Z 僅匹配到的是空行前的 33dfdf,而 \w+\z 則什麼都匹配不到,因為最後是以空行結尾的。
若上述文本中沒有最後的空行,則它們都能匹配到 33dfdf。
最後說明下,php 中是可以使用 \z 和 \Z 的。
D. php中模式修正符 \\1 是什麼意思
Z 匹配必須出現在字元串的末尾或出現在字元串末尾的 \n 之前。
\z 匹配必須出現在僅字元串的末尾。
並且它們都不受多行模式及點模式的影響。
你可以去後盾人平台看看,裡面的東西不錯
E. 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 合法性。
F. php正則表達式問題
/後邊的是修正符
其中i是不區分大小寫
修正符很有用的
例子:
<?php
//標記在整個模式之外;
例://$mode="/\bis\b/U",其中U在外面;
//修正符:i 不區分大小寫的匹配;
//如:"/abc/i"可以與abc或aBC或ABc等匹配;
//修正符:m 將字元串視為多行,不管是那行都能匹配;
例://模式為:$mode="/abc/m";
//要匹配的字元串為:$str="bcefg5e\nabcdfe"
//注意其中\n,換行了;abc換到了下一行;
//$str和$mode仍可以匹配,修正符m使得多行也可匹配;
//修正符:s 將字元串視為單行,換行符作為普通字元;
例://模式為:$mode="/pr.y/";
//要匹配字元串為:$str="pr\ny";
//兩者不可匹配; . 是除了換行以外的字元可匹配;
//修改下模式為:$mode="/pr.y/s";
//其中修正符s將\n視為普通字元,即不是換行;
//最後兩者可以匹配;
//修正符:x 將模式中的空白忽略;
//修正符:A 強制從目標字元串開頭匹配;
例://$mode="/abc/A";
//可以與$str="abcsdfi"匹配,
//不可以與$str2="sdsdabc"匹配;
//因為$str2不是以abc開頭;
//修正符:D 如果使用$限制結尾字元,則不允許結尾有換行;
例://模式為:$mode="/abc$/";
//可以與最後有換行的$str="adshabc\n"匹配;
//元子符$會忽略最後的換行\n;
//如果模式為:$mode="/abc/D",
//則不能與$str="adshabc\n"匹配,
//修正符D限制其不可有換行;必需以abc結尾;
//修正符:U 只匹配最近的一個字元串;不重復匹配;
例:
如模式為:
$mode="/a.*c/";
$str="abcabbbcabbbbbc" ;
preg_match($mode,$str,$content);
echo $content[0]; //輸出:abcabbbcabbbbbc;
//如果$mode="/a.*c/";變成$mode="/a.*c/U";
// 則只匹配最近一個字元串,輸出:abc;
//修正符:e 配合函數preg_replace()使用,
可以把匹配來的字元串當作正則表達式執行;
?>
G. PHP中preg_match()和preg_replace()的一些問題
(一)當中的!是正則表達式(簡稱正則式)的分割界定符號。意味著開始的!和第二個!之間是正則式的【主式】(為了便於你理解,不得不這么做個偽定義),我們大多數時候都喜歡用「/」作為分割界定符號,因為在(一)中,剛好已經有「/」在【主式】中了。第二個!後面的isU等,是正則式的修正符,至於各個修正符的用法和作用,強烈建議你去查看PHP手冊。
(二)這個[1]中的1,代表著匹配到結果賦值給$outputs後,$outputs數組的下標為1的值,就是前面【主式】中"(*)"匹配到的內容。
(三)第三個,是正則式中「\」轉義符號的用法體現。在正則式中「.」是匹配所有字元的(暫不考慮修正符模式),「\.」卻可以匹配「.」了。在這個正則式中,\/wap\.php將會匹配到「/wap.php」,並用「index.php」去替換掉它。
H. PHP正則表達式((:[0-9a-zA-Z$_.`-]|[\xC2-\xDF][\x80-\xBF])+)/is是什麼意思
(?: )表示只進行分組,不進行捕獲
[0-9a-zA-Z$_.`-] ——0-9、a-z、A-Z或$、_、.、`、-中的一個字元
| ——表示或者
[\xC2-\xDF][\x80-\xBF] ——用十六進製表示的字元范圍【具體是什麼字元不太清楚,比如漢字的范圍一般是 4E00-9FA5】
+ ——前面的字元有一個或多個
(?: +) 外面的括弧( )——是捕獲括弧。即不捕獲單個匹配字元,只捕獲匹配的最大字串。
/is——是PHP中正則表達式模式修飾符,其中i代表 不區分大小寫,s代表:如果設定了這個修正符,那麼,被匹配的字元串將視為一行來看,包括換行符,換行符將被視為普通字元串。
模式修飾符還有:m、x、e等
I. php正則修正符的問題preg_match碰到\r和\n的時候是不是添加X修正符就可以了
\r \n \t \s \.\\等等都是有意義的,匹配的時候會自動轉義,如果是\m,或者\q或者反斜線跟其他的字母或中文組合就沒有意義,PCRE會忽略反斜線不去轉義.具體定義的轉義特殊字元,查一查手冊就知道了.