php基礎入門四
一、正則表達式
1>正則表達式的基本語法:
正則匹配模式使用分隔符與元字符組成,分隔符可以是非數字、非反斜線、非空格的任意字符。經常使用的分隔符是正斜線(/)、hash符號(#) 以及取反符號(~)
/foo bar/
#[0-9]$#
~php~
如果模式中包含分隔符,則分隔符需要使用反斜槓(\)進行轉義。
$pattern = "/http:\/\//";
2>元字符和轉義符
元字符 | 含義 | 元字符 | 含義 |
---|---|---|---|
\ | 一般用於轉義字符 | . | 匹配除了換行符外的任意字符 |
^ | 行首 | $ | 行尾 |
[ | 開始字符類定義 | ] | 結束字符類定義 |
開始一個可選分支 | ( | 子組的開始標誌 | |
) | 子組的結束標誌 | { | 自定義量詞開始標記 |
} | 自定義量詞結束標記 | - | 標記字符範圍 |
量詞元字符:
元字符 | 含義 | 元字符 | 含義 |
---|---|---|---|
? | 表示[0,1]次匹配 | * | [0,n]次匹配 |
+ | 表示[1,n]次匹配 |
3>貪婪模式和惰性模式
貪婪模式:在可匹配與可不匹配的時候,優先匹配
當使用+之後將會變的貪婪,它將匹配儘可能多的字符,但使用問號?字符時,它將儘可能少的匹配字符,既是懶惰模式。
$p = '/\d+\-\d+/';
$str = "我的電話是010-12345678";
preg_match($p, $str, $match);
echo $match[0]; //結果爲:010-12345678
懶惰模式:在可匹配與可不匹配的時候,優先不匹配
$p = '/\d?\-\d?/';
$str = "我的電話是010-12345678";
preg_match($p, $str, $match);
echo $match[0]; //結果爲:0-1
4>字符串是否存在
preg_match()
意義:用來判斷一類字符模式是否存在。
語法:preg_match(str)
返回值:返回 pattern 的匹配次數。 它的值將是0次(不匹配)或1次,因爲preg_match()在第一次匹配後 將會停止搜索。
$p = '/love/';
$str = "I love you too";
if (preg_match($p, $str)) {
echo 'matched';
}
preg_match_all()
意義:搜索字符串中所有給定正則表達式的匹配結果並且將它們以指定順序輸出到matches中。在第一個匹配找到後, 子序列繼續從最後一次匹配位置搜索.
語法:preg_match_all (str,flags)
$p = "/<tr><td>(.*?)<\/td>\s*<td>(.*?)<\/td>\s*<\/tr>/i";
$str = "<table> <tr><td>Eric</td><td>25</td></tr> <tr><td>John</td><td>26</td></tr> </table>";
preg_match_all($p, $str, $matches);
print_r($matches);
//Array ( [0] => Array ( [0] => Eric25 [1] => John26 ) [1] => Array ( [0] => Eric [1] => John ) [2] => Array ( [0] => 25 [1] => 26 ) )
preg_match_all('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
matches[0]保存完整模式的所有匹配, $matches[1] 保存第一個子組的所有匹配,
5>正則表達式的搜索和替換
preg_replace()
意義:搜索字符串中的特定字符或者替換指定的字符
語法:preg_replace($pattern, $replacement, $string)
返回值:如果string是一個數組, preg_replace()返回一個數組, 其他情況下返回一個字符串,如果發生錯誤,返回 NULL 。
$string = 'February 17, 2018';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '$3, ${1} $2';
echo preg_replace($pattern, $replacement, $string); //2018, February 17
其中${1}與$1的寫法是等效的,表示第一個匹配的字串,$2代表第二個匹配的。
用正則表達式去除多餘的空格或字符
$str = 'one two';
$str = preg_replace('/\s+/', ',', $str);
echo $str; // 結果改變爲'one,two'