前言
很多小夥伴在學習php中,正則表達式是一道過不去的坎,初學者在看到正則表達式的複雜符號時,總會一頭霧水,丈二的和尚摸不着頭腦,冷月在剛剛開始學習正則表達式時也是一頭懵。不過,冷月會用由淺入深的講解正則表達式的基礎和簡單實戰,相信大家看完這篇文章時,會有一定的收穫。好了,廢話不多說,讓我們開啓正則表達式的學習吧!let’s go!
文章目錄
初識正則表達式
我們先來看一看在菜鳥教程裏,正則表達式的定義:
- 正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z之間的字母)和特殊字符(稱爲"元字符")。
- 正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。
- 正則表達式是繁瑣的,但它是強大的,學會之後的應用會讓你除了提高效率外,會給你帶來絕對的成就感。只要認真閱讀本教程,加上應用的時候進行一定的參考,掌握正則表達式不是問題。
- 許多程序設計語言都支持利用正則表達式進行字符串操作。
相信大家看到這麼學術的話語,或多或少都有些瞌睡感,冷月在這裏總結一下,簡單來說,正則表達式就是根據特定的匹配規則,在待處理的數據中,匹配出結果來
PHP中常用的正則表達式函數
事先聲明:以下參數 $pattern=正則表達式; $subject = 匹配的目標數據,如果小夥伴們對正則表達式的基本語法不瞭解可以配合冷月的下一篇博客來學習,冷月在下一篇博客中詳細的介紹了正則表達式的基本語法
1.preg_match() 和preg_match_all()
preg_match() 和preg_match_all()用於執行一個正則表達式匹配。接收3個參數:
參數名 | 說明 |
---|---|
$pattern | 輸入要搜索的模式,也就是正則字符串 |
$subject | 輸入字符串 |
&$matches | 多維數組,作爲輸出參數輸出匹配結果 |
其中要主要到的是,第三個參數爲引用參數,在函數內改變引用參數的值會改變外部參數的值,不理解的同學可以參考冷月的另一篇博文《php面試筆記(1)-php基礎知識-變量和引用變量》學習。
preg_match() 匹配到一次就返回,preg_match_all()匹配所有的結果,返回值爲成功匹配的次數。
我們來看一段實例代碼:
<?php
/**
* Created by 冷月小白.
* 微信公衆號: 學長冷月
*/
$pattern = "/[0-9]/"; //匹配數字0-9
$subject = "4sd54as54ds54ds"; //待匹配的文本
$a1 = $a2 = [];//存放匹配結果的數組
preg_match($pattern, $subject, $a1);
preg_match_all($pattern, $subject, $a2);
print_r($a1); //輸出 [0] => 4
echo "<br />";
print_r($a2);//輸出 [0] => Array (
//[0] => 4,
//[1] => 5,
//[2] => 4,
//[3] => 5,
//[4] => 4,
//[5] => 5,
//[6] => 4,
// )
?>
2.preg_replace() 和preg_filter()
preg_replace() 和preg_filter()用於執行一個正則表達式搜索和替換。接收3個參數:
參數名 | 說明 |
---|---|
$pattern | 輸入要搜索的模式,也就是正則字符串 |
$replacement | 替換的字符串或字符串數組 |
$subject | 要進行搜索和替換的字符串或字符串數組 |
preg_replace() 和preg_filter()的功能基本相同。區別只有在匹配字符串數組時preg_filter 只返回匹配結果,不匹配的直接忽略,而 preg_replace 將不匹配的結果也一起返回。
我們來看一段示例代碼:
<?php
/**
* Created by 冷月小白.
* 微信公衆號: 學長冷月
*/
$pattern = "/[0-9]/"; //匹配數字0-9
$subject = "4sd54as54ds54ds"; //待匹配的文本
$replacement = '數字'; //用於替換的字符串
$str1 = preg_replace($pattern, $replacement, $subject);
$str2 = preg_filter($pattern, $replacement, $subject);
print_r($str1); //輸出 數字sd數字數字as數字數字ds數字數字ds
echo "<br />";
print_r($str2);//輸出 數字sd數字數字as數字數字ds數字數字ds
?>
3.preg_grep()
preg_grep() 函數用於返回匹配模式的數組條目。也就是說preg_grep()是閹割版的preg_filter()函數,只匹配個數,不替換文本。接收2個參數:
參數名 | 說明 |
---|---|
$pattern | 輸入要搜索的模式,也就是正則字符串 |
$input | 輸入的數組 |
我們來看一段示例代碼:
<?php
/**
* Created by 冷月小白.
* 微信公衆號: 學長冷月
*/
$array = array(1, 2, 3.4, 53, 7.9);
// 返回所有包含浮點數的元素
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
print_r($fl_array); //輸出 ([2] => 3.4 [4] => 7.9)
?>
4.preg_split()
preg_replace 函數通過一個正則表達式分隔字符串。也就是根據正則來分隔字符串。接收2個參數:
參數名 | 說明 |
---|---|
$pattern | 輸入要搜索的模式,也就是正則字符串 |
$subject | 輸入字符串 |
我們來看一段示例代碼:
<?php
<?php
/**
* Created by 冷月小白.
* 微信公衆號: 學長冷月
*/
$pattern = "/[0-9]/"; //匹配數字0-9
$subject = "4sd4as5ds5ds"; //待匹配的文本
$res = preg_split($pattern, $subject);
var_dump($res); //輸出
// [
//[0]=> string(0) "",
// [1]=> string(2) "sd",
// [3]=> string(2) "as",
// [5]=> string(2) "ds",
// [7]=> string(2) "ds"]
5.preg_split()
preg_last_error 函數用於轉義正則表達式字符。也就是爲每個正則表達式語法中的字符前增加一個反斜線。 這通常用於你有一些運行時字符串 需要作爲正則表達式進行匹配的時候。正則表達式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
也就是說,在使用正則表達式時,有些特殊字符有其他特定的意義,而使用preg_split()轉義後,可以被PHP正則函數正常的識別。
好了,今天冷月爲大家的分享就到這裏了,小夥伴們在學習了本博文後,應該對正則表達式的使用有了一定的理解,但是也要勤加練習,才能早日成爲代碼大師呦!明天,冷月將爲大家帶來正則表達式的基本語法和簡單實例。
歡迎關注我的公衆號:學長冷月,獲得獨家整理的學習資源和日常乾貨推送。
如果您對我的專題內容感興趣,也可以關注我的博客:guoyu7.com