線上正則檢測工具連結
正規表示式語法參考
. 除換行符以外的所有字元
. 轉義字元(另有*, (, \, 等等.)
^ 字串開頭
$ 字串結尾
d,w,s 一個數字, 字元 [A-Za-z0-9_], 空格.
D,W,S 一個非數字, 非字元 [A-Za-z0-9_], 非空格.
[abc] a,b或c中的一個.
[a-z] a到z中的一個字母.
[^abc] 除a,b或c的一個字元.
aa|bb aa或者bb.
? 0次或1次匹配.
* 任意次數匹配.
+ 一次或一次以上匹配.
{n} n次精確匹配.
{n,} n次或n次以上匹配.
{m,n} 最少m次,最多n次匹配.
??,*?,+?,{n}?, etc. 同上,但儘可能少次數的匹配.
(expr) 捕獲 expr 子模式,以 1使用它, 等等.
(?:expr) 忽略捕獲的子模式.
(?=expr) 正向預查模式 expr.
(?!expr) 負向預查模式 expr.
php正則函式介紹與區別
preg_match & preg_match_all
//執行一個正規表示式的匹配
preg_match(string $pattern , string $subject[,array $matches])
//執行一個全域性正規表示式匹配
preg_match_all(string $pattern , string $subject[,array $matches])
preg_match()
返回 $pattern
的匹配次數0或1次,因為匹配到第一個後就會停止搜尋,而 preg_match_all()
將會一直搜尋 $subject
到結尾
<?php
$pattern=`/[0-9]/`;
$object=`werdf43ofd9as2noi4`;
$m1=$m2=array();
preg_match($pattern,$object,$m1);
preg_match_all($pattern,$object,$m2);
var_dump($m1);
var_dump($m2);
//結果:
Array
(
[0] => 4
)
Array
(
[0] => Array
(
[0] => 4
[1] => 3
[2] => 9
[3] => 2
[4] => 4
)
)
preg_fiflter & preg_replace
//只返回經過正則匹配的結果
preg_fiflter(mixed $pattern , mixed $replacement , mixed $subject)
//放回所有結果
preg_replace(mixed $pattern , mixed $replacement , mixed $subject)
$subject = array(`1`, `a`, `2`, `b`, `3`, `A`, `B`, `4`);
$pattern = array(`/d/`, `/[a-z]/`, `/[1a]/`);
$replace = array(`A:$0`, `B:$0`, `C:$0`);
echo "preg_filter returns
";
print_r(preg_filter($pattern, $replace, $subject));
echo "preg_replace returns
";
print_r(preg_replace($pattern, $replace, $subject));
//結果:
preg_filter returns
Array
(
[0] => A:C:1
[1] => B:C:a
[2] => A:2
[3] => B:b
[4] => A:3
[7] => A:4
)
preg_replace returns
Array
(
[0] => A:C:1
[1] => B:C:a
[2] => A:2
[3] => B:b
[4] => A:3
[5] => A
[6] => B
[7] => A:4
)
其他正則函式介紹
-
preg_quote(string $pattern) — 轉義正規表示式字元,有時候匹配字元中包含正規表示式語法,需要進行轉義才能進行匹配
正規表示式特殊字元有: . + * ? [ ^ ] $ ( ) { } = ! < > | : – -
preg_split(string $pattern , string $subject) — 通過一個正規表示式分隔字串,類似於explode函式
-
preg_grep — 返回匹配模式的陣列條目
$array = array("23.32","22","12.009","23.43.43");
print_r(preg_grep("/^(d+)?.d+$/",$array));
//結果:
Array
(
[0] => 23.32
[2] => 12.009
)
-
preg_replace_callback — 執行一個正規表示式搜尋並且使用一個回撥進行替換
<?php
// 將文字中的年份增加一年.
$text = "April fools day is 04/01/2002
";
$text.= "Last christmas was 12/24/2001
";
// 回撥函式
function next_year($matches)
{
// 通常: $matches[0]是完成的匹配
// $matches[1]是第一個捕獲子組的匹配
// 以此類推
return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
"|(d{2}/d{2}/)(d{4})|",
"next_year",
$text);
?>
//結果
April fools day is 04/01/2003
Last christmas was 12/24/2002