国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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);

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通化县| 平昌县| 陇川县| 石门县| 惠水县| 宣恩县| 林周县| 皮山县| 沧州市| 安西县| 墨竹工卡县| 舞阳县| 宁乡县| 枣庄市| 仪陇县| 从化市| 鄂尔多斯市| 桐柏县| 大厂| 达州市| 井研县| 阿巴嘎旗| 类乌齐县| 东乡县| 健康| 嘉义县| 当涂县| 江永县| 美姑县| 宜城市| 五家渠市| 墨玉县| 万载县| 伊吾县| 贡嘎县| 砀山县| 鄢陵县| 蒲江县| 苗栗市| 南开区| 沾益县|