今天看一個教程中有寫了一些Regex用法,裡面主要講到了正則對字元的分割、匹配、尋找、替換及一些入門知識與常用執行個體,所以整理過來與大家分享。
1.Regex的介紹和作用。
01.什麼是Regex?
Regex(英語:Regular Expression、regex或regexp,縮寫為RE),也譯為正規標記法、常規標記法,在電腦科學中,是指一個用來描述或者匹配一系列符合某個句法規則的字串的單個字串。在很多文字編輯器或其他工具裡,Regex通常被用來檢索和/或替換那些符合某個模式的常值內容。許多程式設計語言都支援利用Regex進行字串操作。
規則文法
02.主要作用:分割、匹配、尋找、替換。
| 運算式 |
匹配 |
| /^s*$/ |
匹配空行。 |
| /d{2}-d{5}/ |
驗證由兩位元字、一個連字號再加 5 位元字組成的 識別碼。 |
| /]*)?>[sS]*/ |
匹配 HTML 標籤。 |
2.PHP中兩個常用的正則函數。
preg_match 正則函數,以perl預言為基礎。(比較效率,需要自訂一個開始結束符。)
ereg 正則函數,以POSIX為基礎(Uniox、Script)。
3.Regex中包括的元素。
01.原子(一般字元:a-z A-Z 0-9、原子表、逸出字元)。
02.原子符(有特殊功能的字元)。
03.模式修正符(系統內建部分模組,類似函數)。
4.Regex中的“原子”。
01.a-z A-Z _ 0-9 //最常見的字元。
02.(abc) (skd) //用括弧包含起來的單元符號。
03.[abcs] [^abd] //貪婪匹配,用方括弧包含的源自表,原子表中^代表排除或者相反內容。
04.逸出字元(區分大小寫)
d 包含所有數字 == [0-9]。
D 非包含所有數字 == [^0-9]。
w 包含所有英文字元 == [a-zA-Z_0-9]。
W 非包含所有英文字元&數字,用來匹配特殊符號 == [^a-zA-Z_0-9]。
s 包含空白地區如斷行符號、換行、分頁符 == [fnr]。
元字元
* 匹配前一個內容的0次1次或多次
. 匹配內容的0次1次或多次,但不包含斷行符號換行
+ 匹配前一個內容的1次或多次
?匹配前一個內容的0次或1次
| 選擇匹配類似PHP中的| (因為這個運算子合是弱類型導致前面最為整體匹配)
^ 匹配字串首部內容
$ 匹配字串尾部內容
b 匹配單詞邊界,邊界可以是空格或者特殊符合
B 匹配除帶單詞邊界意外內容
{m} 匹配前一個內容的重複次數為M次
{m,} 匹配前一個內容的重複次數大於等於M次
{m,n} 匹配前一個內容的重複次數M次到N次
( ) 合并整體匹配,並放入記憶體,可使用1 2…依次擷取
執行個體:
| 代碼如下 |
複製代碼 |
$mode = "#test#"; //這裡可以用以上原子表進行匹配。 $str = "sdfsstestdf"; if (preg_match($mode, $str, $end)) { //mode正則模組、str正則內容、end正則結果,以數組輸出。 echo "匹配成功" . $end[0]; } else { echo "匹配失敗"; } ?> |
常用正則
* 1、 ^S+[a-z A-Z]$ 不可為空 不能有空格 只能是英文字母
* 2、 S{6,} 不可為空 六位以上
* 3、 ^d+$ 不能有空格 不能非數字
* 4、 (.*)(.jpg|.bmp)$ 只能是jpg和bmp格式
* 5、 ^d{4}-d{1,2}-d{1,2}$ 只能是2004-10-22格式
* 6、 ^0$ 至少選一項
* 7、 ^0{2,}$ 至少選兩項
* 8、 ^[s|S]{20,}$ 不可為空 二十字以上
* 9、 ^+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(.|-))+[a-z]{2,6}$郵件
* 10、 w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*([,;]s*w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*)* 輸入多個地址用逗號或空格分隔郵件
* 11、 ^(([0-9]+))?[0-9]{7,8}$電話號碼7位或8位或前面有區號例如(022)87341628
* 12、 ^[a-z A-Z 0-9 _]+@[a-z A-Z 0-9 _]+(.[a-z A-Z 0-9 _]+)+(,[a-z A-Z 0-9 _]+@[a-z A-Z
0-9 _]+(.[a-z A-Z 0-9 _]+)+)*$
* 只能是字母、數字、底線;必須有@和.同時格式要規範 郵件
* 13 ^w+@w+(.w+)+(,w+@w+(.w+)+)*$上面運算式也可以寫成這樣子,更精練。
14 ^w+((-w+)|(.w+))*@w+((.|-)w+)*.w+$ [/size]
匹配中文字元的Regex: [u4e00-u9fa5]
匹配特定數字:
^[1-9]d*$ //匹配正整數
^-[1-9]d*$ //匹配負整數
^-?[1-9]d*$ //匹配整數
^[1-9]d* |0$ //匹配非負整數(正整數 + 0)
^-[1-9]d* |0$ //匹配非正整數(負整數 + 0)
^[1-9]d*.d* |0.d*[1-9]d*$ //匹配正浮點數
^-([1-9]d*.d* |0.d*[1-9]d*)$ //匹配負浮點數
^-?([1-9]d*.d* |0.d*[1-9]d* |0?.0+ |0)$ //匹配浮點數
^[1-9]d*.d* |0.d*[1-9]d* |0?.0+ |0$ //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]d*.d* |0.d*[1-9]d*)) |0?.0+ |0$ //匹配非正浮點數(負浮點數 + 0)
由字母a~z(不區分大小寫)、數字0~9、減號或底線組成
只能以數字或字母開頭和結尾 使用者名稱長度為4~18個字元
| 代碼如下 |
複製代碼 |
^[a-za-z0-9]{1}[a-za-z0-9|-|_]{2-16}[a-za-z0-9]{1}$ |
使用者名稱為大寫字母小寫字母或底線,並以字母開頭,長度為6-20
| 代碼如下 |
複製代碼 |
^[a-za-z][wd_]{5,19} |
使用者名稱:包括英文小寫、漢字、數字、底線,不能全部是數字,底線不能在末尾
| 代碼如下 |
複製代碼 |
/^[a-z0-9_u4e00-u9fa5]+[^_]$/g utf-8下 preg_match("/^[a-z0-9_x80-xff]+[^_]$/g",$a); gbk下: preg_match("/^[a-z0-9_".chr(0xa1)."-".chr(0xff)."]+[^_]$/",$a) |
郵箱
| 代碼如下 |
複製代碼 |
function is_email($email){ return strlen($email) > 6 && preg_match(“/^[w-.]+@[w-]+(.w+)+$/“, $email); } ?> |
url地址
| 代碼如下 |
複製代碼 |
function autolink($foo) { $foo = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_/+.~#?&//=]+)', '/1', $foo); if( strpos($foo, "http") === FALSE ){ $foo = eregi_replace('(www.[-a-zA-Z0-9@:%_/+.~#?&//=]+)', '/1', $foo); }else{ $foo = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_/+.~#?&//=]+)', '/1/2', $foo); } return $foo; } ?> |
http://www.bkjia.com/PHPjc/632636.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632636.htmlTechArticle今天看一個教程中有寫了一些Regex用法,裡面主要講到了正則對字元的分割、匹配、尋找、替換及一些入門知識與常用執行個體,所以整...