a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Regex > 正文

實用的正則表達式學習日記

2024-09-07 17:40:13
字體:
來源:轉載
供稿:網友

我們在學習正則表達式的時候最好將學習過程中的重要知識記錄下來這樣才有助于我們更好地掌握正則表達式,今天小編就將為大家分享一些實用的正則表達式學習日記,希望對大家的學習有所幫助。

//匹配文本,這個偶爾比較好用,但是要小心字符中包含/E
$str?=?'[a-z]';
$str?=?preg_replace('//G[a-z]/E/',?'',?$str);
echo?$str;?//打印空,全被替換掉了,相關大概就是preg_quote功能

//給匹配結果命名,這樣在匹配結果中就可以用這個名稱來獲取值
$str?=?'abc123abc';
preg_match('/(?P<num>/d+)/',?$str,?$arr);
echo?$arr['num'];?//相當于echo?$arr[1]

//僅用于分組的括號,匹配內容不會被變量捕獲,有時候需要這樣提高執行效率
$str?=?'abc123abc';
preg_match('/abc(?:/d+)/',?$str,?$arr);
echo?$arr[1];?//除了$arr[0]外沒有$arr[1]了,不會賦予/1

//插入的好幫手,向前、向后錨點搜索位置,每3位添加一個逗號
$str?=?'fdfad123456789fdfd';
$str?=?preg_replace('/(?<=/d)(?=(/d{3})+(?!/d))/',?',',?$str);
echo?$str;?//打印?fdfad123,456,789fdfd

//以最少的結果匹配
$str?=?123456;
preg_match('//d+/',?$str,?$arr);
echo?$arr[0];?//是人都知道是123456吧
preg_match('//d+?/',?$str,?$arr);
echo?$arr[0];?//這次是1

//一個比較有用的,可以判斷前面的是否有匹配過,比如下邊的例子,可以忽略等號右邊是否有單引號雙引號或者什么都沒有
$str?=?<<<HTML
<font?size=12></font>
<font?size='13'></font>
<font?size="14"></font>
<font?size="15></font>
HTML;
preg_match_all('/<font/s+size=([/'"]?)(/d+)/1[^>]*>/',?$str,?$arr);
print_r($arr);
/*
Array
(
????[0]?=>?12
????[1]?=>?13
????[2]?=>?14
)
*/

//部分模式修飾符,模式修飾符也可以放在表達式中的
//這里匹配符合XHTML規范的style里的顏色值,大寫的STYLE被忽略了,但是里面的color可以大小寫無所謂
$str?=?'<b?style="COLOR:red"></b><b?STYLE="color:blue"></b><b?style="color:green"></b>';
preg_match_all('/style=([/'"]?)(?i)color:(/w+)/1(?-i)/',?$str,?$arr);
print_r($arr[2])

//也可以把匹配內容放到里面,用:隔開,就不用寫結束(?-i)
//preg_match_all('/style=([/'"]?)(?i:color:(/w+))/1/',?$str,?$arr);
//再看一例子
$str?=?'<B>Style</B>';
preg_match('/<B>(?i:style)<//B>/',?$str,?$arr);
print_r($arr);?//可以匹配到
$str?=?'<B>Style</b>';
preg_match('/<B>(?i:style)<//B>/',?$str,?$arr);
print_r($arr);?//什么都沒匹配到

//單詞檢索,可惜只能用在英文
$str?=?'I/'m?a?teacher';
preg_match_all('//b[a-z]+/b/i',?$str,?$arr);
print_r($arr)

//u修飾符,按unicode匹配
$str?=?'你您';
$str?=?preg_replace('/[你您]/',?'you',?$str);
echo?$str;?//被拆開了,打印4次you

//看下面加上u修飾符后的效果,該修飾符需要編碼utf-8否則會報錯
//我的文本都是gb2312,所以要轉成utf-8
$str?=?iconv('gb2312',?'utf-8',?'你您');
$regex?=?iconv('gb2312',?'utf-8',?'/[你您]/u');
$str?=?preg_replace($regex,?'you',?$str);
echo?$str;?//打印2次you

//x模式修飾符,可以忽略空白和加注釋
$str?=?'test?Test';
preg_match('/test??#只匹配小寫的test/x',?$str,?$arr);
print_r($arr);

//排除環視(?<!...)?(?!...)、忽略優先?*??+?????的復合使用
$str?=?'test?<B>test1<B>?test2</B>';
preg_match('/<B>(?:.(?<!<B>))*<//B>/i',?$str,?$arr);
//或者?preg_match('/<B>(?:(?!<B>).)*<//B>/i',?$str,?$arr);
print_r($arr)

//當時這樣寫應付不了?$str?=?'test?<B>test1<B>?test2</B>?test3</B>';
//改寫一下正則既可?preg_match_all('/<B>(?:(?!<//?B>).)*<//B>/i',?$str,?$arr);
//根據上面來完成一個最簡單的UBB替換
$str?=?'test?[b]test1[b]?test2[/b]?test3[/b]test';
$str?=?preg_replace('//[B/]((?:(?!/[//?B/]).)*)/[//B/]/i',?'<b>/1</b>',?$str);
$str?=?preg_replace('//[B/]((?:(?!/[//?B/]).)*)/[//B/]/i',?'<b>/1</b>',?$str);
print_r($str)

//如果已經確認回朔并不會有匹配結果,可以使用固化分組來放棄備用狀態提高效率
$str?=?'Subject';
preg_match('/(/w+):/',?$str,?$arr);

//用以下方法代替
//在第一組匹配規則匹配到文本末尾t時匹配結束,啟用第二組匹配規則:并不會找到結果,所以這個時候回朔查找,但是/w不會包含:,所以可以直接放棄,
preg_match('/(?>/w+):/',?$str,?$arr);

上文就是小編為大家介紹實用的正則表達式學習日記,正則在自然語言處理中廣泛運用到,希望本文內容對前端開發者有多幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品伊人 | 婷婷天堂网 | 免费av一区| 国产精品一区二区久久久久 | 四虎成人永久 | 亚洲免费在线观看 | 老汉色影院 | 日韩欧美国产精品一区二区三区 | 国产精品美女av | 羞羞网站在线观看入口免费 | 亚洲欧美在线一区 | 欧美中文字幕一区二区 | 日日干天天操 | 久久久久久免费视频 | 国产精品成人一区二区三区 | 亚洲人成中文字幕在线观看 | 欧美成人午夜免费视在线看片 | 亚洲精品久久 | 久精品在线 | 久久久精 | 欧美日韩一区二区视频在线观看 | www国产免费 | 国产麻豆乱码精品一区二区三区 | 在线高清av | 国产中文一区 | 婷婷国产 | 亚洲成人一区二区在线观看 | 欧美国产视频 | 黄色一级毛片 | 色综合久久88色综合天天6 | 国产精品第一国产精品 | 国产精品丰满对白在线观看 | 欧美视频免费在线观看 | 亚洲免费人成在线视频观看 | 欧美日韩一区精品 | 亚洲国产欧美一区二区三区久久 | 久久久久成人精品 | 日韩精品成人 | 亚洲综合福利视频 | 久久av一区二区三区亚洲 | 欧美视频在线观看免费 |