首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

正則表達式詳解(一):元字符、定位符、字符類與分組捕獲核心語法

     編輯:PHP 相關知識

正則表達式基礎概念

正則表達式 是一種文本模式描述語言,用於匹配、搜索、替換、驗證字符串。廣泛應用於編程語言、編輯器、Shell 工具、數據庫查詢中。

核心元字符速查

符號名稱含義示例匹配
.點號任意單字符(除換行)c.t → cat, cot, czt
*星號前導字符 0 次或多次ab*c → ac, abc, abbc
+加號前導字符 1 次或多次ab+c → abc, abbc
?問號前導字符 0 次或 1 次ab?c → ac, abc
{n}固定次數恰好 n 次a{3} → aaa
{n,}至少 n 次n 次或更多a{2,} → aa, aaa, ...
{n,m}範圍次數n 到 m 次a{2,4} → aa, aaa, aaaa

定位符

符號含義示例
^字符串開始^hello 匹配 "hello world",不匹配 "say hello"
$字符串結束world$ 匹配 "hello world",不匹配 "world wide"
\b單詞邊界\bcat\b 匹配 "cat"、"a cat",不匹配 "category"
\B非單詞邊界\Bcat\B 匹配 "scatter" 中的 cat

字符類與預定義字符類

語法含義等價寫法
[abc]a 或 b 或 c-
[^abc]非 a/b/c-
[a-z]小寫字母-
[0-9]數字\d
\D非數字[^0-9]
\w單詞字符(字母數字下劃線)[a-zA-Z0-9_]
\W非單詞字符[^a-zA-Z0-9_]
\s空白字符(空格、制表、換行)[ \t\r\n\f]
\S非空白字符[^ \t\r\n\f]

分組與捕獲

/(php)+/           # 整體分組,匹配 php, phpphp
/(?php|java)/ # 命名捕獲組
/(\d{4})-(\d{2})/  # 兩個捕獲組:年、月
/(?:non-capture)/  # 非捕獲分組(僅分組不捕獲)

或運算與優先級

/cat|dog/          # 匹配 cat 或 dog
/(cat|dog)food/    # 匹配 catfood 或 dogfood
/^cat|dog$/        # 注意:等同於 (^cat) | (dog$) 而非 ^(cat|dog)$

貪婪 vs 非貪婪(懶惰)匹配

<?php
$str = '<div>content</div><span>more</span>';
preg_match('/<.+>/', $str);      // 貪婪:匹配整個 "<div>content</div><span>more</span>"
preg_match('/<.+?>/', $str);     // 非貪婪:匹配 "<div>"

修飾符

修飾符作用
i忽略大小寫
m多行模式(^$ 匹配行首尾)
s單行模式(. 匹配換行)
x擴展模式(忽略空白、允許註釋)
uUTF-8 模式(正確處理 Unicode)

實戰練習

  1. 匹配郵箱:/^[\w.+-]+@[\w-]+\.[\w.-]+$/
  2. 匹配身份證(18位):/^\d{17}[\dXx]$/
  3. 匹配 IPV4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)$/
  4. 去除 HTML 標籤:preg_replace('/<[^>]+>/', '', $html)

下篇將講解 PHP 中的 PCRE 函數族、JavaScript 與 Perl 的正則差異、進階替換技巧與效能優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved