PHP正則

前言

正則是一個(gè)類(lèi)似于醫(yī)生的鬼畫(huà)符般的存在,所以我要認(rèn)真記錄下學(xué)習(xí)正則的過(guò)程固阁。在python中我會(huì)經(jīng)常遇到爬取網(wǎng)站源碼后需要對(duì)源碼進(jìn)行清洗獲得所需的信息,一般的我都是用beautifulsoup這個(gè)包,這個(gè)包容易使用,可謂是開(kāi)包即用倍踪,但也有缺點(diǎn)就是速度慢,在數(shù)據(jù)量大的時(shí)候可謂是十分苦惱索昂。而正則表達(dá)式則是可以解決這個(gè)困擾建车,一般地我都是使用(*.?)這個(gè)貪婪匹配來(lái)匹配所需字段,但只會(huì)這個(gè)確確實(shí)實(shí)不行楼镐。在php中正則可以廣泛應(yīng)用于防止各類(lèi)攻擊,總之一句話往枷,正則表達(dá)式是十分重要的?虿!错洁!

參考資料

PHP中文網(wǎng)——php入門(mén)教程之一周學(xué)會(huì)PHP

定界符

/$%^@
示例
/正則表達(dá)式/
$正則表達(dá)式$

簡(jiǎn)單匹配

$zz = '/a/';

$string = 'ddfdjjvi2jfvkwkfi24';

if(preg_match($zz, $string, $matches)){
   echo '匹配到了秉宿,結(jié)果為:';
   var_dump($matches);
}else{
   echo '沒(méi)有匹配到';
}

這里preg_match()函數(shù)第一個(gè)參數(shù)為正則表達(dá)式,第二個(gè)為所需要匹配的字符串屯碴,第三個(gè)為匹配的結(jié)果描睦,返回值為匹配的結(jié)果數(shù),若無(wú)則返回0导而,$match是一個(gè)數(shù)組忱叭。
原子 說(shuō)明
\d 匹配一個(gè)0-9
\D 除了0-9以外的所有字符
\w a-zA-Z0-9_
\W 除了0-9A-Za-z_以外的所有字符
\s 匹配所有空白字符\n \t \r 空格
\S 匹配所有非空白字符
[ ] 指定范圍的原子

關(guān)于[]的使用

/[a-z]/匹配在a-z范圍的原子
/[1-6]/匹配在1-6范圍的原子
/[^xxx]/不匹配在xxx范圍內(nèi)的原子\

元字符

* 是代表匹配前面的一個(gè)原子隔崎,匹配0次或者任意多次前面的字符。
+ 匹配一次或多前前面的一個(gè)字符
? 前面的字符可有可無(wú)【可選】 有或沒(méi)有
. 更標(biāo)準(zhǔn)一些應(yīng)該把點(diǎn)算作原子韵丑。匹配除了\n以外的所有字符
^ 必須要以抑揚(yáng)符之后的字符串開(kāi)始
$ 必須要以$之前的字符結(jié)尾
\b 詞邊界
\B 非邊界
{m} 有且只能出現(xiàn)m次
{n,m} 可以出現(xiàn)n到m次
{m,} 至少m次爵卒,最大次數(shù)不限制
() 改變優(yōu)先級(jí)或者將某個(gè)字符串視為一個(gè)整體,匹配到的數(shù)據(jù)取出來(lái)也可以使用它

更多的在此正則表達(dá)式 – 元字符 | 菜鳥(niǎo)教程

元字符使用示例

/\d+/ 匹配0-9第一個(gè)數(shù)字之后連續(xù)的數(shù)字撵彻,至少匹配一次

/\d*/ 匹配0-9第一個(gè)數(shù)字之后連續(xù)的數(shù)字钓株,匹配零次或任意多次

/./ 匹配任意字符

/b|c/ 匹配b或c兩個(gè)字符之一

/ab(c|b)cd/ 匹配abccd或者abbcd兩個(gè)之一

關(guān)于$和^

^ 是表示匹配必須以^之后的字符作為開(kāi)頭的字符
如我的網(wǎng)站redmango.top,^ red表示當(dāng)前匹配必須以red為開(kāi)頭的字符陌僵,若有多個(gè)字段轴合,如redmango,bluemango碗短,若我們僅僅需要匹配第一個(gè)受葛,則可以使用/^red\w+/,此時(shí)可以匹配得所需以red開(kāi)頭的字段豪椿。
$是表示匹配必須以$之前的字符作為開(kāi)頭的字符
使用方法與^相似

關(guān)于\b和\B

\b詞邊界奔坟,就是指必須要在最前或者最后;\B非邊界搭盾,就是不能在一個(gè)正則表達(dá)式的最前或者最后咳秉。
以示例作說(shuō)明:

\b 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置鸯隅。例如澜建,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”蝌以。

\B 匹配非單詞邊界炕舵。“er\B”能匹配“verb”中的“er”跟畅,但不能匹配“never”中的“er”咽筋。

如this is apple. /\bis\b/ 匹配的是is,而/\Bis/匹配的則是this中的is

關(guān)于{}的用法

{n}

$pattern = '/\b\w{3}\b/';
$string1 = "this is a and that is b";

這個(gè)示例可以匹配指定長(zhǎng)度的字符徊件,此時(shí)輸出為a

{n,m}

{n,m}匹配n到m次

{n,}

{n,}匹配至少n次

{,m}

{,m}匹配最多m次

正則匹配的模式修正符

i 模式中的字符將同時(shí)匹配大小寫(xiě)字母.
m 字符串視為多行
s 將字符串視為單行,換行符作為普通字符.
x 將模式中的空白忽略.
A 強(qiáng)制僅從目標(biāo)字符串的開(kāi)頭開(kāi)始匹配.
D 模式中的美元元字符僅匹配目標(biāo)字符串的結(jié)尾.
U 匹配最近的字符串.

e模式僅限于在preg_replace中使用
使用時(shí)將修正符置于定界符之后奸攻,示例:/aa/i
此時(shí)同時(shí)匹配aa和AA

匹配替換

preg_replace(pattern,replacement, string) preg_replace返回值為替換完畢的字符串replacement為需要替換的字符串,$string為替換的內(nèi)容

常用正則函數(shù)

preg_filter 執(zhí)行一個(gè)正則表達(dá)式搜索和替換
preg_grep 返回匹配模式的數(shù)組條目
preg_match 執(zhí)行一個(gè)正則表達(dá)式匹配
preg_match_all 執(zhí)行一個(gè)全局正則表達(dá)式匹配
preg_replace_callback_array 傳入數(shù)組,執(zhí)行一個(gè)正則表達(dá)式搜索和替換使用回調(diào)
preg_replace_callback 執(zhí)行一個(gè)正則表達(dá)式搜索并且使用一個(gè)回調(diào)進(jìn)行替換
preg_replace 執(zhí)行一個(gè)正則表達(dá)式的搜索和替換
preg_split 通過(guò)一個(gè)正則表達(dá)式分隔字符串

歡迎訪問(wèn)我的博客www.redmango.top

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虱痕,一起剝皮案震驚了整個(gè)濱河市睹耐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌部翘,老刑警劉巖局劲,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亡脸,死亡現(xiàn)場(chǎng)離奇詭異崭别,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赘风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窄绒,“玉大人贝次,你說(shuō)我怎么就攤上這事≌玫迹” “怎么了蛔翅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)位谋。 經(jīng)常有香客問(wèn)我山析,道長(zhǎng),這世上最難降的妖魔是什么掏父? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任笋轨,我火速辦了婚禮,結(jié)果婚禮上赊淑,老公的妹妹穿的比我還像新娘爵政。我一直安慰自己,他們只是感情好陶缺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布钾挟。 她就那樣靜靜地躺著,像睡著了一般饱岸。 火紅的嫁衣襯著肌膚如雪掺出。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天苫费,我揣著相機(jī)與錄音汤锨,去河邊找鬼。 笑死百框,一個(gè)胖子當(dāng)著我的面吹牛闲礼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铐维,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼柬泽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了方椎?” 一聲冷哼從身側(cè)響起聂抢,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤钧嘶,失蹤者是張志新(化名)和其女友劉穎棠众,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闸拿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年空盼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片新荤。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揽趾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苛骨,到底是詐尸還是另有隱情篱瞎,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布痒芝,位于F島的核電站俐筋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏严衬。R本人自食惡果不足惜澄者,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望请琳。 院中可真熱鬧粱挡,春花似錦、人聲如沸俄精。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嘀倒。三九已至屈留,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間测蘑,已是汗流浹背灌危。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碳胳,地道東北人勇蝙。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像挨约,于是被迫代替她去往敵國(guó)和親味混。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于PCRE的介紹以及實(shí)現(xiàn)正則表達(dá)式功能的所有說(shuō)明诫惭,都可以在官方手冊(cè)中看到:正則表達(dá)式(兼容 Perl) 一翁锡、認(rèn)識(shí)...
    拿破侖蛋糕閱讀 1,614評(píng)論 0 1
  • 1,與Javascript 正則替換不同夕土,PHP preg_replace() 默認(rèn)就是替換所有符號(hào)匹配條件的元素...
    努力前進(jìn)_7d51閱讀 262評(píng)論 0 0
  • 正則表達(dá)式介紹 正則表達(dá)式簡(jiǎn)介 正則表達(dá)式是用于描述字符排列和匹配模式的一種語(yǔ)法規(guī)則馆衔。它主要用于字符串的模式分割瘟判、...
    dptms閱讀 10,935評(píng)論 1 9
  • 因?yàn)楸容^重要,所以還是單獨(dú)拿出來(lái)作一篇文章角溃,好好學(xué)習(xí)一下拷获。 正則表達(dá)式:Regular expression 定義...
    齊舞647閱讀 1,002評(píng)論 3 7
  • 今天是大年初一匆瓜, 奶奶教我和姐姐一起做年糕, 我們把米漿放在盆里面未蝌,然后我們加白糖黃糖驮吱,我們就用手把它們搓均勻,就...
    韋金瀅閱讀 255評(píng)論 0 0