正則:用於檢索字符串的規則;
js正則:
var reg=/規則/
reg是一個對象,在瀏覽器下;
所以研究他的屬性和方法
屬性:
global是修飾符,代表全局檢索 g
ignorecase 忽略大小寫的檢索 i
multiline 代表多行匹配 m
lastindex 代表檢索的起始位置 注意:這個需要結合全局匹配 g
source 資源 代表正則表達式中字段的內容;
方法:
匹配的方法 test()
捕獲的方法 exec()
每次捕獲,就只捕獲第一個,就不捕獲了,這就是正則的懶惰行;
如何解決正則的懶惰性?
讓其進行全局捕獲;
正則的規則寫法;
[abs] 代表方括號中任意一個字符;
(red|blue|green) 對一個整體分組
[^abs] 代表除了方括號中任意一個字符
[0-9] 0-9之間的任意一個數字;
元字符:
. 代表任意一個字符;
\. 就是普通的.
\w 單詞字符
\d 數字字符
\s 空白字符
\b 單詞邊界
量詞:
n+ 至少一個;
n* 0到多個;
n? 0到1個;
n(x) 包含x個;
n(x,) 至少x個;
n(x,y) 大於等於x個,小於等於y個;
n$ 包含以n的結尾
^n 包含以n的開頭;
a(?=n) 指定字符串a后面緊跟着n的字符串,返回a
針對量詞:正則的貪婪性;
正則的貪婪性:每次捕獲,盡可能多的捕獲;
解決正則的貪婪性:在量詞的后面加?
正則中?的作用:
1.放在普通的元字符后面,代表0到1個;
2.放在量詞的后面,代表取消正則的貪婪性;
正則中()的作用;
1.改變優先級;
2.分組捕獲
3.分組引用;
案例:
var reg=/(a)(b)/
分組捕獲:首先正則是一個整體,捕獲ab,捕獲到在將ab分成兩個小的分組,捕獲不到就是 (注意字符串中沒有ab的大正則即為捕獲不到) null
如何取消分組捕獲;
在分組中的前面加上?: 就可以了
php正則:
1.php中的正則的定界符 // 代表起始和結束;
2.//里面的內容就是規則;
定界符的種類有很多,可以使用 ## !! || {} //
php提供的方法
preg_match_all(參數一,參數二,參數三) 執行一個全局正則表達式的匹配
參數一:檢索的模式,我們寫的正則;
參數二:被檢索的字符中;
參數三:是一個多維數組,就是匹配的結果
案例:
$rg="/a/";
$st="ab";
var_dump(preg_match_all($rg,$st,$arr)) //返回匹配到的個數
var_dump($arr);
preg_match_all() 返回值int 是匹配的個數,
$arr 是二維數組 存匹配的結果;
正則中也分普通字符,和元字符;
普通字符:a s 12 _
元字符:在正則中代表特殊意義的字符;
\d 數字
[0-9] 0-9中任意一個數字;
. 任意一個字符;
\. 就是代表.
\w 單詞字符
\d 代表數字
\s 空白字符
\b 單詞邊界
量詞:
* 0到多個
+ 至少一個;
? 0或1個;
{n} 剛好n個; 與js量詞的寫法有區別
{n,} 至少n個
{n,m} n到m個;
^n 以n的開頭
n$ 以n的結尾
| 代表或的意思 as|ad as或ad
[asc] 方括號中任意一個
[^asc] 除了方括號中的任意一個;
() 一個整體,改變優先級,分組引用;
模式修飾符:
i:忽略大小寫 m:多行匹配
s:對特殊字符也能匹配;
正則中的有些符號,是匹配不了的,如果加 s 這個修飾符,這些符號也可以匹配;
案例:
$re="/a.b/s";
$st="a\nb";
換行符 window下 \n
linux下 \r\n
php正則的貪婪性:
$rg="/.*/";
php中正則的貪婪性, 只有.*體現他的貪婪性 解除貪婪性 后面加?
php中的小括號:
1.成為一個整體
2.分組引用;
php中的分組引用 \\1 \\2 與js的區別 \1 \2;
php正則提供的方法:
preg_match_all() 執行一個全局正則,表達式匹配;
preg_match() 執行一個正則,表達式匹配; 返回值int類型 0和1 匹配上了,就不往下匹配了;
參數和preg_match_all()中的一致
preg_replace() 執行一個正則表達式,搜索和替換;
參數一:正則表達式;
參數二:用於替換的字符串;
參數三:用於檢索目標字符串;
返回的結果:替換后的字符串;