導航:首頁 > 編程語言 > php正則問號

php正則問號

發布時間:2025-02-02 04:55:48

php如何正則匹配出帶問號的域名來php如何正則匹配出帶問號的域名來源

PHP-如何在PHP中使用正則表達式匹配URL中的域名

馬鞭php

//從URL獲取主機名

preg_match(/^(http://)?(【^/])/i,,$matches);

$host=$matches[2];

//從主機名中獲取最後兩段

preg_match(/[^./].[^./]$/,$host,$matches);

回聲;

馬鞭month=$month中的$php_self是鏈接地址,這里給出的是一個變數來代替冗長的字元串,比如說www.phpfans.net,問號後面的year、month傳的參數,並分別給他們賦值為$y-lnk、$month。添加該鏈接出錯是語法錯誤!將雙引號去掉即可。

mysql中?號是什麼?

問號表示稍後將被replace的參數。使用參數化查詢比將參數直接embedded查詢更安全。

SQLServer調用這個參數化查詢,而Oracle調用它綁定variables。

用法因您執行查詢的語言而異。

這里是一個如何使用PHP的例子。

假設$mysqli是一個資料庫連接,而people是一個有4列的表。

Ⅱ php 正則表達式中的 .* 表示什麼意思

php沿襲perl語言則表達式規則用戶需要根據則表達式規則書寫些具定含義字元串通匹配提取用戶想要信息

Ⅲ /^(0|[1-9]\d*)([.]5)$/ 在PHP正則中是什麼意思

這個正則:匹配非負整數和非負整數加上0.5(即:xxx.5);

鑒於你給這么多分,詳細來講講哈:
^ 匹配開頭,$匹配結尾,意味著匹配的字元串,必須最多隻能是數字和".5"組成,不能包含其他字元。
()是分組,| 是或者的意思,\d*這個表示0-9,第一個括弧裡面的意思是,字元串為0,或者1-9裡面的任意數字,加上0-9組成的任意位數的數字,即一個正整數。

第二個括弧,[.],這裡面只有1個'.',等價於'\.',即小數點;後面的5就是數字5;最後加個問號,代表後面的".5"是可選的,可以不要。

總結:上面的正則能匹配:0,1,2,3,0.5,1.5,999,999.5這些類型的數字字元串。

有不明白的,歡迎繼續追問。

Ⅳ php 中的問號是什麼意思

這個不是問號,是一種表達符號,格式一般是: 條件?返回值1:返回值2
如果條件為true就返回返回值1,如果條件為false,就返回返回值2,這是if...else 的一種簡寫方式.

Ⅳ 20涓甯哥敤鐨勬e垯琛ㄨ揪寮

姝e垯琛ㄨ揪寮:瑕佹眰6-20浣,鍙鑳芥湁澶у皬鍐欏瓧姣嶅拰鏁板瓧,騫朵笖澶у皬鍐欏瓧姣嶅拰鏁板瓧閮...


[0-9A-Za-z] {6錛20} 鐢6-20浣嶆暟瀛楁垨榪欏瓧姣嶇粍鎴愩傚尮閰嶈岀粨灝句綅緗銆傛e垯琛ㄨ揪寮忥紝鍙堢О瑙勫垯琛ㄨ揪寮忋傦紙鑻辮錛歊egular Expression錛屽湪浠g爜涓甯哥畝鍐欎負regex銆乺egexp鎴朢E錛夛紝璁$畻鏈虹戝︾殑涓涓姒傚康銆

姝e垯琛ㄨ揪寮忥細^(錛燂紒[0-9]+$)(錛燂紒[a-zA-Z]+$)[0-9A-Za-z]{6錛20} 姝e垯琛ㄨ揪寮忥紝鍙堢О瑙勫垯琛ㄨ揪寮忋傦紙鑻辮錛歊egular Expression錛屽湪浠g爜涓甯哥畝鍐欎負regex銆乺egexp鎴朢E錛夛紝璁$畻鏈虹戝︾殑涓涓姒傚康銆

姝e垯鐨勫啓娉曪細[da-zA-Z]+ 鍙浠ュ尮閰 鏁板瓧錛屽ぇ灝忓啓瀛楁瘝 涓鏁版槸鑷沖皯涓涓 鍙﹀栵紝涓嶈佺敤 w+ 鍥犱負w鏄鍖歸厤瀛楁瘝鏁板瓧涓嬪垝綰匡紝澶氫竴涓涓嬪垝綰匡紝涓嶇﹀悎浣犵殑瑕佹眰鐨勩傚叿浣撳畬鏁翠唬鐮侊紝姝ゅ勪笉緇欒創錛屼綘灝辮嚜宸卞啓鍚с

var s = /^[a-z]+[a-za-z0-9_]*$/錛沘lert(s.test(r))錛涜繖涓鍙鑳藉垽鏂鍙鍏佽稿嚭鐜板瓧姣嶆暟瀛椾笅鍒掔嚎錛屽悓鏃朵互灝忓啓瀛楁瘝寮澶達紝浣嗘槸闀垮害娌℃硶鎺у埗銆傜敤姝e垯鏉ュ垽鏂榪欎釜闀垮害搴旇ユ槸涓嶈屼簡銆

鏀墮泦鏁寸悊欏圭洰涓甯哥敤鍒扮殑姝e垯琛ㄨ揪寮


1銆佹e垯琛ㄨ揪寮忎竴鑸鐢ㄤ簬澶勭悊鏂囨湰鍐呭癸紝甯哥敤鍛戒護鏈塯rep錛宻ed錛宎wk錛寁im絳 閫氶厤絎︿竴鑸鐢ㄤ簬鍖歸厤鏂囦歡鍚嶏紝甯哥敤鍛戒護鏈塮ind錛宭s錛宑p絳 鍚勭﹀彿鐨勫惈涔変笉灝界浉鍚.浠涔堝湴鏂逛嬌鐢ㄦe垯琛ㄨ揪寮 vim grep sed awk nginx apache mail鍨冨溇閭浠惰繃婊ゃ

2銆佷互涓嬪氨鏄瀵硅秴甯哥敤鐨凱HP姝e垯琛ㄨ揪寮忚繘琛岀殑鏀墮泦鏁寸悊錛屼負浜嗘柟渚垮ぇ瀹舵洿蹇鏇村ソ鐨勬帉鎻php姝e垯琛ㄨ揪寮忋

3銆丗lags 鍐欏湪緇撴潫鐨/涔嬪悗錛屽彲浠ュ獎鍝嶆暣涓姝e垯琛ㄨ揪寮忕殑鍖歸厤琛屼負銆

姝e垯琛ㄨ揪寮


姝e垯琛ㄨ揪寮忥紝鍙堢О瑙勫垯琛ㄨ揪寮忋傛槸璁$畻鏈虹戝︾殑涓涓姒傚康銆傛e垯琛ㄨ揪寮忛氬父琚鐢ㄦ潵媯緔銆佹浛鎹㈤偅浜涚﹀悎鏌愪釜妯″紡(瑙勫垯)鐨勬枃鏈銆傝稿氱▼搴忚捐¤璦閮芥敮鎸佸埄鐢ㄦe垯琛ㄨ揪寮忚繘琛屽瓧絎︿覆鎿嶄綔銆備緥濡傦紝鍦≒erl涓灝卞唴寤轟簡涓涓鍔熻兘寮哄ぇ鐨勬e垯琛ㄨ揪寮忓紩鎿庛

姝e垯琛ㄨ揪寮(鑻辨枃錛歊egular Expression)錛屽湪璁$畻鏈虹戝︿腑錛屾槸鎸囦竴涓鐢ㄦ潵鎻忚堪鎴栬呭尮閰嶄竴緋誨垪絎﹀悎鏌愪釜鍙ユ硶瑙勫垯鐨勫瓧絎︿覆鐨勫崟涓瀛楃︿覆銆傚湪寰堝氭枃鏈緙栬緫鍣ㄦ垨鍏朵粬宸ュ叿閲岋紝姝e垯琛ㄨ揪寮忛氬父琚鐢ㄦ潵媯緔㈠拰/鎴栨浛鎹㈤偅浜涚﹀悎鏌愪釜妯″紡鐨勬枃鏈鍐呭廣

姝e垯琛ㄨ揪寮忥紝鍙堢О瑙勫垯琛ㄨ揪寮忋傦紙鑻辮錛歊egular Expression錛屽湪浠g爜涓甯哥畝鍐欎負regex銆乺egexp鎴朢E錛夛紝璁$畻鏈虹戝︾殑涓涓姒傚康銆傛e垯琛ㄨ揪寮忛氬父琚鐢ㄦ潵媯緔銆佹浛鎹㈤偅浜涚﹀悎鏌愪釜妯″紡(瑙勫垯)鐨勬枃鏈銆

甯哥敤鐨65鏉℃e垯琛ㄨ揪寮


js甯哥敤姝e垯琛ㄨ揪寮忔暣鏁版垨鑰呭皬鏁幫細^[0-9]+.{0錛1}[0-9]{0錛2}$鍙鑳借緭鍏ユ暟瀛楋細^[0-9]*$銆傚彧鑳借緭鍏n浣嶇殑鏁板瓧錛歗d{n}$銆傚彧鑳借緭鍏ヨ嚦灝憂浣嶇殑鏁板瓧錛歗d{n錛寎$銆傚彧鑳借緭鍏m~n浣嶇殑鏁板瓧錛氥

浠ヤ笅灝辨槸瀵硅秴甯哥敤鐨凱HP姝e垯琛ㄨ揪寮忚繘琛岀殑鏀墮泦鏁寸悊錛屼負浜嗘柟渚垮ぇ瀹舵洿蹇鏇村ソ鐨勬帉鎻php姝e垯琛ㄨ揪寮忋

姝e垯琛ㄨ揪寮忔槸涓縐嶆弿榪板瓧絎︿覆緇撴灉鐨勮娉曡勫垯錛屾槸涓涓鐗瑰畾鐨勬牸寮忓寲妯″紡錛屽彲浠ュ尮閰嶃佹浛鎹銆佹埅鍙栧尮閰嶇殑瀛楃︿覆銆傚父鐢ㄧ殑璇璦鍩烘湰涓婇兘鏈夋e垯琛ㄨ揪寮忥紝濡侸avaScript銆乯ava絳夈

瓚呭父鐢ㄧ殑PHP姝e垯琛ㄨ揪寮忔敹闆嗘暣鐞


浠ヤ笅灝辨槸瀵硅秴甯哥敤鐨凱HP姝e垯琛ㄨ揪寮忚繘琛岀殑鏀墮泦鏁寸悊錛屼負浜嗘柟渚垮ぇ瀹舵洿蹇鏇村ソ鐨勬帉鎻php姝e垯琛ㄨ揪寮忋

錛歖*$錛乗鏄瀵筽hp涓鍗曞紩鍙風殑杞涔夈傛垨鑰呰繕鏈夋洿綆鍗曠殑 錛乛/錛焄a-z0-9 =錛歖*$錛乮 i琛ㄧず蹇界暐澶у皬鍐欍傛ā寮忓垎闅旂﹀氨鏄涓轟簡鍖哄垎琛ㄨ揪寮忓拰鍍廼榪欐牱鐨勬ā寮忎慨楗扮﹁岃捐$殑銆

浠涔堟槸姝e垯琛ㄨ揪寮忥細綆鍗曠殑璇達紝姝e垯琛ㄨ揪寮忔槸涓縐嶅彲浠ョ敤浜庢ā寮忓尮閰嶅拰鏇挎崲鐨勫己澶у伐鍏楓傚湪鍑犱箮鎵鏈夌殑鍩轟簬UNIX/LINUX緋葷粺鐨勮蔣浠跺伐鍏蜂腑鎵懼埌姝e垯琛ㄨ揪寮忕殑鐥曡抗錛屼緥濡傦細Perl鎴朠HP鑴氭湰璇璦銆

ThinkPHP鐨勮嚜鍔ㄩ獙璇佸父鐢ㄧ殑姝e垯 涓鑸鎴戜滑瑙佺殑姣旇緝澶氱殑鏄璁劇疆瑙勫垯涓簉equire銆乪mail涔嬬被鐨勶紝鍏跺疄榪欎簺鏈韜涔熸槸灞炰簬姝e垯琛ㄨ揪寮忛獙璇佹柟寮忥紝鍙鏄緋葷粺鍐呯疆瀹氫箟浜嗕竴浜涘父鐢ㄧ殑姝e垯琛ㄨ揪寮忚屽凡銆

鍏抽敭鍦版柟鏄奼夊瓧鐨勮〃紺篭xa0-xff銆備笅闈㈡槸鎴戝啓鐨勪緥瀛愮▼搴忥紝璋冭瘯閫氳繃錛氾紵php str=奼夊瓧123456abcdef+-*/ABCDE錛丂#$%^&*()緇撳熬銆

PHP甯哥敤姝e垯琛ㄨ揪寮忔眹鎬


1銆乗w灝辨槸鍖歸厤瀛楁瘝鎴栨暟瀛楁垨涓嬪垝綰挎垨奼夊瓧錛+鍒欎笌*宸涓嶅氾紝鍖哄埆鏄+鍖呮嫭閲嶅0嬈★紝鑰*灝卞彲浠ャ=灝眜shi鍖歸厤=鍙 涓や釜鏂滄潬鍒欒〃紺烘e垯琛ㄨ揪寮忕殑鍒嗙晫銆

2銆佹e垯琛ㄨ揪寮忕殑闄愬畾絎︽湁錛歍hinkPHP鐨勮嚜鍔ㄩ獙璇佹満鍒舵槸涓轟簡榪涜岃〃鍗曟暟鎹楠岃瘉錛岄獙璇佸彲浠ユ敮鎸乫unction銆 callback銆乧onfirm銆乪qual銆乽nique鍜宺egex錛岃繖閲岃佽茬殑鏄浣跨敤姝e垯琛ㄨ揪寮忚繘琛岄獙璇併傜壒孌婂瓧絎 璁稿氬厓瀛楃﹁佹眰鍦ㄨ瘯鍥懼尮閰嶅畠浠鏃剁壒鍒瀵瑰緟銆

3銆乛/錛焄a-zA-Z0-9 =錛歖*$錛乗鏄瀵筽hp涓鍗曞紩鍙風殑杞涔夈傛垨鑰呰繕鏈夋洿綆鍗曠殑 錛乛/錛焄a-z0-9 =錛歖*$錛乮 i琛ㄧず蹇界暐澶у皬鍐欍傛ā寮忓垎闅旂﹀氨鏄涓轟簡鍖哄垎琛ㄨ揪寮忓拰鍍廼榪欐牱鐨勬ā寮忎慨楗扮﹁岃捐$殑銆

Ⅵ php preg_match_all 的正則表達式的書寫方法

正則表達式的基本語法
一個正則表達式,分為三個部分:分隔符,表達式和修飾符。
分隔符可以是除了特殊字元以外的任何字元(比如"/ !"等等),常用的分隔符是"/"。表達式由一些特殊字元(特殊字元詳見下面)和非特殊的字元串組成,比如"[a-z0-9_-]+@[a-z0-9_-.]+"可以匹配一個簡單的電子郵件字元串。修飾符是用來開啟或者關閉某種功能/模式。下面就是一個完整的正則表達式的例子:

/hello.+?hello/is

上面的正則表達式"/"就是分隔符,兩個"/"之間的就是表達式,第二個"/"後面的字元串"is"就是修飾符。
在表達式中如果含有分隔符,那麼就需要使用轉義符號"/",比如"/hello.+?//hello/is"。轉義符號除了用於分隔符外還可以執行特殊字元,全部由字母構成的特殊字元都需要"/"來轉義,比如"/d"代表全體數字。
正則表達式的特殊字元
正則表達式中的特殊字元分為元字元、定位字元等等。
元字元是正則表達式中一類有特殊意義的字元,用來描述其前導字元(即元字元前面的字元)在被匹配的對象中出現的方式。元字元本身是一個個單一的字元,但是不同或者相同的元字元組合起來可以構成大的元字元。
元字元:
大括弧:大括弧用來精確指定匹配元字元出現的次數,例如"/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"。
貪婪模式
前面在元字元中提到過"?"還有一個重要的作用,即"貪婪模式",什麼是"貪婪模式"呢?
比如我們要匹配以字母"a"開頭字母"b"結尾的字元串,但是需要匹配的字元串在"a"後面含有很多個"b",比如"a bbbbbbbbbbbbbbbbb",那正則表達式是會匹配第一個"b"還是最後一個"b"呢?如果你使用了貪婪模式,那麼會匹配到最後一個"b",反之只是匹配到第一個"b"。

使用貪婪模式的表達式如下:

/a.+?b/

/a.+b/U

不使用貪婪模式的如下:

/a.+b/

上面使用了一個修飾符U,詳見下面的部分。
修飾符
在正則表達式裡面的修飾符可以改變正則的很多特性,使得正則表達式更加適合你的需要(注意:修飾符對於大小寫是敏感的,這意味著"e"並不等於"E")。正則表達式裡面的修飾符如下:

i :如果在修飾符中加上"i",則正則將會取消大小寫敏感性,即"a"和"A" 是一樣的。

m:默認的正則開始"^"和結束"$"只是對於正則字元串如果在修飾符中加上"m",那麼開始和結束將會指字元串的每一行:每一行的開頭就是"^",結尾就是"$"。

s:如果在修飾符中加入"s",那麼默認的"."代表除了換行符以外的任何字元將會變成任意字元,也就是包括換行符!

x:如果加上該修飾符,表達式中的空白字元將會被忽略,除非它已經被轉義。

e:本修飾符僅僅對於replacement有用,代表在replacement中作為PHP代碼。

A:如果使用這個修飾符,那麼表達式必須是匹配的字元串中的開頭部分。比如說"/a/A"匹配"abcd"。

E:與"m"相反,如果使用這個修飾符,那麼"$"將匹配絕對字元串的結尾,而不是換行符前面,默認就打開了這個模式。

U:和問號的作用差不多,用於設置"貪婪模式"。
PCRE相關的正則表達式函數
PHP的Perl兼容正則表達式提供的多個函數,分為模式匹配,替換和匹配數目等等:
1、preg_match :

函數格式:int preg_match(string pattern, string subject, array [matches]);

這個函數會在string中使用pattern表達式來匹配,如果給定了[regs],就會將string記錄到[regs][0]中,[regs][1]代表使用括弧"()"記錄下來的第一個字元串,[regs][2]代表記錄下來的第二個字元串,以此類推。preg如果在string中找到了匹配的pattern,就會返回"true",否則返回"false"。
2、preg_replace :

函數格式:mixed preg_replace(mixed pattern, mixed replacement, mixed subject);

這個函數會使用將string中符合表達式pattern的字元串全部替換為表達式replacement。如果replacement中需要包含pattern的部分字元,則可以使用"()"來記錄,在replacement中只是需要用"/1"來讀取。
3、preg_split :

函數格式:array preg_split(string pattern, string subject, int [limit]);

這個函數和函數split一樣,區別僅在與split可以使用簡單正則表達式來分割匹配的字元串,而preg_split使用完全的Perl兼容正則表達式。第三個參數limit代表允許返回多少個符合條件的值。
4、preg_grep :

函數格式:array preg_grep(string patern , array input);

這個函數和preg_match功能基本上,不過preg_grep可以將給定的數組input中的所有元素匹配,返回一個新的數組。 下面舉一個例子,比如我們要檢查Email地址的格式是否正確:
<?php

function emailIsRight($email) {

if (preg_match("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email)) {

return 1;

}

return 0;

}

if(emailIsRight('[email protected]')) echo '正確<br>';

if(!emailIsRight('y10k@fffff')) echo '不正確<br>';

?>
上面的程序會輸出"正確<br>不正確"。
PHP中的Perl兼容正則表達式和Perl/Ereg正則表達式的區別
雖然叫做「Perl兼容正則表達式」,但是和Perl的正則表達式相比,PHP的還是由一些不同,比如修飾符「G」在Perl裡面代表全部匹配,但是在PHP中沒有加入對這個修飾符的支持。

還有就是和ereg系列函數的區別,ereg也是PHP中提供的正則表達式函數,不過和preg相比,要弱上很多。
1、ereg裡面是不需要也不能使用分隔符和修飾符的,所以ereg的功能比preg要弱上不少。

2、關於".":點在正則裡面一般是除了換行符以外的全部字元,但是在ereg裡面的"."是任意字元,即包括換行符!如果在preg裡面希望"."能夠包括換行符,可以在修飾符中加上"s"。

3、ereg默認使用貪婪模式,並且不能修改,這個給很多替換和匹配帶來麻煩。

4、速度:這個或許是很多人關心的問題,會不會preg功能強大是以速度來換取的?不用擔心,preg的速度要遠遠比ereg快,筆者做了一個程序測試:
<?php

echo "Preg_replace used time:";

$start = time();

for($i=1;$i<=100000;$i++) {

$str = "ssssssssssssssssssssssssssss";

preg_replace("/s/","",$str);

}

$ended = time()-$start;

echo $ended;

echo "ereg_replace used time:";

$start = time();

for($i=1;$i<=100000;$i++) {

$str = "ssssssssssssssssssssssssssss";

ereg_replace("s","",$str);

}

$ended = time()-$start;

echo $ended;

echo "str_replace used time:";

$start = time();

for($i=1;$i<=100000;$i++) {

$str = "sssssssssssssssssssssssssssss";

str_replace("s","",$str);

}

$ended = time()-$start;

echo $ended;

?>
結果:

Preg_replace used time:5

ereg_replace used time:15

str_replace used time:2

str_replace因為不需要匹配所以速度非常快,而preg_replace的速度比ereg_replace要快上不少。
關於PHP3.0對於preg的支持
在PHP 4.0中默認加入了preg支持,但是在3.0中確沒有。如果在3.0中希望使用preg函數,必須載入php3_pcre.dll文件,只要在php.ini的extension部分設置加入"extension = php3_pcre.dll"然後從新啟動PHP就可以了!
其實正則表達式還常用於UbbCode的實現,很多PHP論壇都使用了這個方法(比如zForum zphp.com或者vB vbullent.com),但是具體的代碼比較長。

正則表達式(regular expression)描述了一種字元串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。
列目錄時,dir *.txt或ls *.txt中的*.txt就不是一個正則表達式,因為這里*與正則式的*的含義是不同的。
為便於理解和記憶,先從一些概念入手,所有特殊字元或字元組合有一個總表在後面,最後一些例子供理解相應的概念。

正則表達式

是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。
可以通過在一對分隔符之間放入表達式模式的各種組件來構造一個正則表達式,即/expression/

普通字元

由所有那些未顯式指定為元字元的列印和非列印字元組成。這包括所有的大寫和小寫字母字元,所有數字,所有標點符號以及一些符號。

非列印字元

字元 含義
/cx 匹配由x指明的控制字元。例如, /cM 匹配一個 Control-M 或回車符。x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字元。
/f 匹配一個換頁符。等價於 /x0c 和 /cL。
/n 匹配一個換行符。等價於 /x0a 和 /cJ。
/r 匹配一個回車符。等價於 /x0d 和 /cM。
/s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ /f/n/r/t/v]。
/S 匹配任何非空白字元。等價於 [^ /f/n/r/t/v]。
/t 匹配一個製表符。等價於 /x09 和 /cI。
/v 匹配一個垂直製表符。等價於 /x0b 和 /cK。

特殊字元

所謂特殊字元,就是一些有特殊含義的字元,如上面說的"*.txt"中的*,簡單的說就是表示任何字元串的意思。如果要查找文件名中有*的文件,則需要對*進行轉義,即在其前加一個/。ls /*.txt。正則表達式有以下特殊字元。
特別字元 說明
$ 匹配輸入字元串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '/n' 或 '/r'。要匹配 $ 字元本身,請使用 /$。
( ) 標記一個子表達式的開始和結束位置。子表達式可以獲取供以後使用。要匹配這些字元,請使用 /( 和 /)。
* 匹配前面的子表達式零次或多次。要匹配 * 字元,請使用 /*。
+ 匹配前面的子表達式一次或多次。要匹配 + 字元,請使用 /+。
. 匹配除換行符 /n之外的任何單字元。要匹配 .,請使用 /。
[ 標記一個中括弧表達式的開始。要匹配 [,請使用 /[。
? 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。要匹配 ? 字元,請使用 /?。
/ 將下一個字元標記為或特殊字元、或原義字元、或向後引用、或八進制轉義符。例如, 'n' 匹配字元 'n'。'/n' 匹配換行符。序列 '//' 匹配 "/",而 '/(' 則匹配 "("。
^ 匹配輸入字元串的開始位置,除非在方括弧表達式中使用,此時它表示不接受該字元集合。要匹配 ^ 字元本身,請使用 /^。
{ 標記限定符表達式的開始。要匹配 {,請使用 /{。
| 指明兩項之間的一個選擇。要匹配 |,請使用 /|。

構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字元與操作符將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字元、字元集合、字元范圍、字元間的選擇或者所有這些組件的任意組合。

限定符

限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。有*或+或?或{n}或{n,}或{n,m}共6種。
*、+和?限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的後面加上一個?就可以實現非貪婪或最小匹配。
正則表達式的限定符有:
字元 描述
* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價於{0,}。
+ 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
? 匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價於 {0,1}。
{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
{n,} n 是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價於 'o+'。'o{0,}' 則等價於 'o*'。
{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。

定位符

用來描述字元串或單詞的邊界,^和$分別指字元串的開始與結束,/b描述單詞的前或後邊界,/B表示非單詞邊界。不能對定位符使用限定符。

選擇

用圓括弧將所有選擇項括起來,相鄰的選擇項之間用|分隔。但用圓括弧會有一個副作用,是相關的匹配會被緩存,此時可用?:放在第一個選項前來消除這種副作用。
其中?:是非捕獲元之一,還有兩個非捕獲元是?=和?!,這兩個還有更多的含義,前者為正向預查,在任何開始匹配圓括弧內的正則表達式模式的位置來匹配搜索字元串,後者為負向預查,在任何開始不匹配該正則表達式模式的位置來匹配搜索字元串。

後向引用

對一個正則表達式模式或部分模式兩邊添加圓括弧將導致相關匹配存儲到一個臨時緩沖區中,所捕獲的每個子匹配都按照在正則表達式模式中從左至右所遇到的內容存儲。存儲子匹配的緩沖區編號從 1 開始,連續編號直至最大 99 個子表達式。每個緩沖區都可以使用 '/n' 訪問,其中 n 為一個標識特定緩沖區的一位或兩位十進制數。
可以使用非捕獲元字元 '?:', '?=', or '?!' 來忽略對相關匹配的保存。

各種操作符的運算優先順序

相同優先順序的從左到右進行運算,不同優先順序的運算先高後低。各種操作符的優先順序從高到低如下:
操作符 描述
/ 轉義符
(), (?:), (?=), [] 圓括弧和方括弧
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, /anymetacharacter 位置和順序
| 「或」操作

全部符號解釋

字元 描述
/ 將下一個字元標記為一個特殊字元、或一個原義字元、或一個 向後引用、或一個八進制轉義符。例如,'n' 匹配字元 "n"。'/n' 匹配一個換行符。序列 '//' 匹配 "/" 而 "/(" 則匹配 "("。
^ 匹配輸入字元串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '/n' 或 '/r' 之後的位置。
$ 匹配輸入字元串的結束位置。如果設置了RegExp 對象的 Multiline 屬性,$ 也匹配 '/n' 或 '/r' 之前的位置。
* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價於{0,}。
+ 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
? 匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價於 {0,1}。
{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
{n,} n 是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價於 'o+'。'o{0,}' 則等價於 'o*'。
{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。
? 當該字元緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字元串,而默認的貪婪模式則盡可能多的匹配所搜索的字元串。例如,對於字元串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。
. 匹配除 "/n" 之外的任何單個字元。要匹配包括 '/n' 在內的任何字元,請使用象 '[./n]' 的模式。
(pattern) 匹配 pattern 並獲取這一匹配。所獲取的匹配可以從產生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 $0…$9 屬性。要匹配圓括弧字元,請使用 '/(' 或 '/)'。
(?:pattern) 匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。這在使用 "或" 字元 (|) 來組合一個模式的各個部分是很有用。例如, 'instr(?:y|ies) 就是一個比 'instry|instries' 更簡略的表達式。
(?=pattern) 正向預查,在任何匹配 pattern 的字元串開始處匹配查找字元串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字元之後開始。
(?!pattern) 負向預查,在任何不匹配 pattern 的字元串開始處匹配查找字元串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字元之後開始
x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。
[xyz] 字元集合。匹配所包含的任意一個字元。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] 負值字元集合。匹配未包含的任意字元。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] 字元范圍。匹配指定范圍內的任意字元。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內的任意小寫字母字元。
[^a-z] 負值字元范圍。匹配任何不在指定范圍內的任意字元。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內的任意字元。
/b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er/b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
/B 匹配非單詞邊界。'er/B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
/cx 匹配由 x 指明的控制字元。例如, /cM 匹配一個 Control-M 或回車符。x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字元。
/d 匹配一個數字字元。等價於 [0-9]。
/D 匹配一個非數字字元。等價於 [^0-9]。
/f 匹配一個換頁符。等價於 /x0c 和 /cL。
/n 匹配一個換行符。等價於 /x0a 和 /cJ。
/r 匹配一個回車符。等價於 /x0d 和 /cM。
/s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ /f/n/r/t/v]。
/S 匹配任何非空白字元。等價於 [^ /f/n/r/t/v]。
/t 匹配一個製表符。等價於 /x09 和 /cI。
/v 匹配一個垂直製表符。等價於 /x0b 和 /cK。
/w 匹配包括下劃線的任何單詞字元。等價於'[A-Za-z0-9_]'。
/W 匹配任何非單詞字元。等價於 '[^A-Za-z0-9_]'。
/xn 匹配 n,其中 n 為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。例如,'/x41' 匹配 "A"。'/x041' 則等價於 '/x04' & "1"。正則表達式中可以使用 ASCII 編碼。.
/num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。例如,'(.)/1' 匹配兩個連續的相同字元。
/n 標識一個八進制轉義值或一個向後引用。如果 /n 之前至少 n 個獲取的子表達式,則 n 為向後引用。否則,如果 n 為八進制數字 (0-7),則 n 為一個八進制轉義值。
/nm 標識一個八進制轉義值或一個向後引用。如果 /nm 之前至少有 nm 個獲得子表達式,則 nm 為向後引用。如果 /nm 之前至少有 n 個獲取,則 n 為一個後跟文字 m 的向後引用。如果前面的條件都不滿足,若 n 和 m 均為八進制數字 (0-7),則 /nm 將匹配八進制轉義值 nm。
/nml 如果 n 為八進制數字 (0-3),且 m 和 l 均為八進制數字 (0-7),則匹配八進制轉義值 nml。
/un 匹配 n,其中 n 是一個用四個十六進制數字表示的 Unicode 字元。例如, /u00A9 匹配版權符號 (?)。

我又一個正則表達式教程上的東西,粘下來給你看,雖然看著挺多,但是很快能看完。裡面說的已經挺詳細的了,正則表達式其實說簡單很簡單,拿來就用,說復雜也復雜,規則不少,導致應用時變化也很多

Ⅶ php正則 包含<>的怎麼寫

按照你的要求匹配asd標簽的php程序如下(見圖)

點可以匹配除換行符外的所有字元,

加模式符is表示匹配不區分大小寫且點可以匹配換行符,

問號是非貪婪匹配,匹配符合要求的最短字元串,

結果取第一捕獲組的數據.

你的正則匹配除尖括弧外的所有字元,所以無法匹配尖括弧.

閱讀全文

與php正則問號相關的資料

熱點內容
伊克塞爾文檔怎麼進行加密 瀏覽:884
app轉賬是什麼 瀏覽:157
php的基本語法 瀏覽:790
對外漢語pdf 瀏覽:516
如何用mamp本地web伺服器 瀏覽:869
如何加密自己js代碼 瀏覽:627
排列組合a與c的演算法 瀏覽:534
如何在文件夾中找到同名內容 瀏覽:786
有什麼app文字轉韓文配音 瀏覽:372
循環宏1命令 瀏覽:35
斐波那契數列矩陣演算法 瀏覽:674
公式保護後加密不了 瀏覽:82
java跳轉到jsp 瀏覽:819
327平方根演算法 瀏覽:216
win7美化命令行終端 瀏覽:797
免加密狗圖片 瀏覽:485
一隻透明的鳥是什麼app 瀏覽:817
空氣壓縮機油批發商 瀏覽:69
linuxifexist 瀏覽:4
加密tf卡拷入文件 瀏覽:399