全面解讀php-正則表達式


一、正則表達式基礎內容

注:

1、通用原子:

  • \d : 數字。  \D : 除了數字。
  • \w : 數字,字母,下划線。\W : 除了數字,字母,下划線。
  • \s  : 空白符 。 \S : 除了空白符  。

 2、元字符:

  • . :除了換行以外的所有字符
  • * : 匹配前面的內容出現 0 次及以上。
  • ? : 匹配前面的內容出現 0 次或 1 次
  • + : 出現一次或多次。
  • ^ : 必須以它開頭。
  • $ : 必須以它結尾。
  • {n} : 恰巧出現 n 次。
  • {n,} : 大於等於 n 次。
  • {n,m} : 大於等於 n, 小於等於 m.
  • [] : 是一個集合,匹配中括號中的任意一個字符,如:[abc]即為匹配a或b或者c。
  • () : 后項引用 或者是當做一個整體。
  • [^]: 取反。
  • | : 或者
  • [-] : 代表一個范圍,如[0-9],匹配即為 0123456789

 3、模式修正符

  • i:不區分大小寫
  • m:將字符串通過分隔符進行分割,將字符串中的每一行分別進行匹配。
  • e: 將匹配出來的內容做一些php語法上的處理。
  • s: 修正 "." 的換行。
  • U: 取消貪婪模式
  • x: 忽略模式中的空白符。
  • A: 必須以這個模式開頭。
  • D: 修正 "$" 對 "\n" 的忽略。
  • u: 做 utf-8 中文匹配的時候使用。
  • g:該表達式可以進行全局匹配。

 示例:

現在需要正則驗證一個input框,我想輸入的是非整數就自動變成空值。

正則如下;

# 不加入/g,則只返回第一個匹配,無論執行多少次均是如此,如果加入g,則第一次執行也返回第一個匹配,再執行返回第二個匹配,依次類推。
#/[^0-9]/g,這個正則表達式的意思是全局匹配非數字類型和非-的字符。

/[^0-9|-]/g

 

 匹配到該正則后,就將input的值置空即可。

二、后項引用

如果想只去除掉b標簽,只保留里面的字符串,這里就需要用到后項引用。怎么樣后項引用呢,就是將 .* 括起來,然后在匹配的時候,寫上 \1 ,\1 代表第一個括號里面匹配到的內容,當然為了防止 \ 將 1 轉義掉,所以我們使用 \\1 .

 三、貪婪模式

我們這是想匹配到每一個 b 標簽,即<b>abc</b><b>bcd</b>,

//如果使用下面的正則來匹配的話,會匹配出<b>abc</b><b>bcd</b>.
$pattern = '/<b>.*<\/b>/';

所以此處我們要使用 .*?取消貪婪,?代表匹配前面的內容 0 次或者 1次。

//正則表達式改為
$pattern = '/<b>.*?</b>/';
//當然取消貪婪還有一種寫法:就是在后面加上一個 U ,即:
$pattern = '/<b>.*</b>/U';

但是切記不能 .*? 和 U 一起用

四、延伸重點

1、常見PCRE函數

2、中文匹配

示例:

$str = '中文';

a、使用utf-8匹配中文: 

$pattern = '/[\x{4e00}-\x{9fa5}]+/u';

b、使用GB2312匹配中文: 

$pattern = '/[' . chr(0xb0) . '-' . chr(0xf7) . '][' .chr(0xa1) . '-' . chr(0xfe) .']/';
preg_match($pattern, $str, $match); 

3、寫正則表達式的思路

4、示例:

本文為袋鼠學習中的總結,如有轉載請注明出處:https://www.cnblogs.com/chrdai/p/11100233.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM