iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
自我挑戰組

PHP 與 Laravel 雜記系列 第 7

PHP 正則相關函數

PHP Regular expression

本來 PHP 支援兩類 regular expression, 一種為 POSIX-style 相關函數名稱包含 ereg, 一種為 Perl-style 相關函數名稱包含 preg, 自 PHP 5.3 後 POSIX-style 相關函數就棄用了, 現在主要用 Perl-style 相關函數, 這些函數的模式語法與 perl 相當類似, 表達式用分隔符包起來, 例如分隔符使用 "/", 分隔符可以用非字母、非數字、非空白、非""以外的字符表示, 結束分隔符後面是模式修飾符(Pattern Modifiers), 常見模式修飾符有, i 表大小寫不敏感, m 目標字串視為多行

規則

/*
Meta-characters(元字符)
\ 轉義字符
^ 開始位置
$ 結束位置
. 除換行外符外的任何字符
[ 開始字符類定義
] 結束字符類定義
| 可選分支
( 開始子模式
) 結束子模式
? 量詞, 表 0 次或 1 次, 位於量詞後用於改變量詞的貪婪性
* 量詞, 0 或 多次
+ 量詞, 1 或 多次
{ 自定義量詞開始標記
} 自定義量詞結束標記

Meta-characters 在方括號裡面
\ 轉義字符
^ 僅在作為第一個字符, 表明字符類取反
- 標記字符範圍
*/ 
$pattern = '/[a,b]/';  // 匹配 a b 兩種字符
$pattern = "/[0-9]/"; // 匹配數字0-9
$pattern = "/^cat/";  // 匹配 cat 當開頭

preg_match

/*
preg_match(
    string $pattern,  要匹配的模式
    string $subject,  輸入字串
    array &$matches = null, 如果提供這個參數, 會被填充為匹配結果, 
                            $matches[0] 完整模式匹配到的內容, $matches[1] 子模式匹配到的內容
    int $flags = 0,  唯一標記值, 可設為 PREG_OFFSET_CAPTURE, PREG_UNMATCHED_AS_NULL, 
    int $offset = 0  指定目標字串某個位置開始匹配
): int|false  
*/
$str = 'abcdef';
$pattern = '/cd/';
var_dump(preg_match($pattern, $str, $match));
var_dump($match);

上一篇
PHP array 相關函數
下一篇
PHP 關於 autoload
系列文
PHP 與 Laravel 雜記14

尚未有邦友留言

立即登入留言