前言
正則是一個(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(replacement,
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