正則表達(dá)式(Regular Expression,簡(jiǎn)稱(chēng)Regex或RegExp)是一種用于匹配和處理字符串的工具。它是一種特定的語(yǔ)法,通過(guò)字符和符號(hào)的組合來(lái)描述一種文本模式,用于匹配和查找符合該模式的字符串。正則表達(dá)式通常被用于文本編輯器、編程語(yǔ)言、數(shù)據(jù)庫(kù)和操作系統(tǒng)等方面。
正則表達(dá)式可以用來(lái)實(shí)現(xiàn)以下功能:
- 1.匹配和查找字符串中的文本模式。
- 2.替換字符串中的指定文本。
- 3.過(guò)濾文本中的特定內(nèi)容。
- 4.對(duì)文本進(jìn)行校驗(yàn)和格式化。
正則表達(dá)式由普通字符和元字符組成。普通字符就是表示字面含義的字符,如字母、數(shù)字、標(biāo)點(diǎn)符號(hào)等。元字符是一些具有特殊含義的字符,用于描述字符串的特定模式。
常見(jiàn)的元字符包括:
- 1.".":匹配任意單個(gè)字符。
- 2."*":匹配前面的字符零次或多次。
- 3."+":匹配前面的字符至少一次。
- 4."?":匹配前面的字符零次或一次。
- 5."|":匹配兩個(gè)或多個(gè)選擇項(xiàng)中的任意一個(gè)。
- 6."[]":匹配方括號(hào)中的任意一個(gè)字符。
- 7."{}":限定匹配次數(shù)。
- 8."^":匹配字符串的開(kāi)頭。
- 9."$":匹配字符串的結(jié)尾。
除了元字符外,正則表達(dá)式還有一些特殊的字符類(lèi)別,用于匹配特定類(lèi)型的字符,如\d匹配數(shù)字,\w匹配字母、數(shù)字和下劃線(xiàn)
字符 | 說(shuō)明 |
---|---|
. | 匹配除換行符(\n、\r)之外的任何單個(gè)字符。要匹配包括 '\n' 在內(nèi)的任何字符,請(qǐng)使用像"(.|\n)"的模式。 |
* | 匹配前面的子表達(dá)式零次或多次。例如,ab* 能匹配 "a" 以及 "abb"。* 等價(jià)于{0,}。 |
+ | 匹配前面的子表達(dá)式一次或多次。例如,'ab+' 能匹配 "ab" 以及 "abb",但不能匹配 "a"。+ 等價(jià)于 {1,}。 |
? | 匹配前面的子表達(dá)式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等價(jià)于 {0,1}。 |
| | 匹配 x 或 y。例如,'a|bcd' 能匹配 "a" 或 "bcd"。'(a|b)cd' 則匹配 "acd" 或 "bcd"。 |
[abc] | 字符集合。匹配所包含的任意一個(gè)字符。例如, '[abc]' 可以匹配 "ade" 中的 'a'。 |
[^abc] | 負(fù)值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "ade" 中的'd'、'e'。 |
[a-z] | 字符范圍。匹配指定范圍內(nèi)的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫(xiě)字母字符。 |
[^a-z] | 負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內(nèi)的任意字符。 |
{n} | n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'a{2}' 不能匹配 "abc" 中的 'a',但是能匹配 "aabc" 中的兩個(gè) a。 |
{n,} | n 是一個(gè)非負(fù)整數(shù)。至少匹配n 次。例如,'a{2,}' 不能匹配 "abc" 中的 'o',但能匹配 "aaaaaabc" 中的所有 a。'a{1,}' 等價(jià)于 'a+'。'a{0,}' 則等價(jià)于 'a*'。 |
{n,m} | m 和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"a{1,3}" 將匹配 "aaaaaaabc" 中的前三個(gè) a。'a{0,1}' 等價(jià)于 'a?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。 |
^ | 匹配輸入字符串的開(kāi)始位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置。 |
$ | 匹配輸入字符串的結(jié)束位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。 |
\d | 匹配一個(gè)數(shù)字字符。等價(jià)于 [0-9]。 |
\D | 匹配一個(gè)非數(shù)字字符。等價(jià)于 [^0-9]。 |
\s | 匹配任何空白字符,包括空格、制表符、換頁(yè)符等等。 |
\S | 匹配任何非空白字符。 |
\w | 匹配字母、數(shù)字、下劃線(xiàn)。等價(jià)于'[A-Za-z0-9_]'。 |
\W | 匹配非字母、數(shù)字、下劃線(xiàn)。等價(jià)于 '[^A-Za-z0-9_]'。 |
常見(jiàn)的正則表達(dá)式
手機(jī)號(hào):^1[3-9]\d{9}$ 該正則表達(dá)式表示手機(jī)號(hào)的格式必須以1開(kāi)頭,后面接著10個(gè)數(shù)字(總共11位數(shù)字),其中第二位數(shù)字可以是3-9的任意一個(gè)數(shù)字。
電子郵件地址:/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/ 以用戶(hù)名開(kāi)始,后面跟著一個(gè) @
符號(hào),然后是一個(gè)或多個(gè)由字母、數(shù)字、點(diǎn)、下劃線(xiàn)和連字符組成的字符,緊接著是一個(gè)點(diǎn)號(hào),然后是一個(gè)或多個(gè)由字母和點(diǎn)號(hào)組成的字符,最后以?xún)蓚€(gè)或更多字母組成的頂級(jí)域名結(jié)尾。
URL地址:/^https?:\/\/([a-z0-9\-]+\.)+[a-z]{2,6}$/i 這個(gè)正則表達(dá)式的含義是,以 http
或 https
開(kāi)頭,后面跟著一個(gè) ://
,然后是一個(gè)或多個(gè)由字母、數(shù)字和連字符組成的子域名,最后跟著一個(gè)由兩個(gè)到六個(gè)字母組成的頂級(jí)域名。
匹配 <img>
標(biāo)簽 /<img.?src="(.?)".*?>/i 這個(gè)正則表達(dá)式的含義是,在 <img
開(kāi)頭的標(biāo)簽中,匹配 src
屬性和其對(duì)應(yīng)的值,也就是圖片的 URL。 i
表示不區(qū)分大小寫(xiě)。
PHP 正則匹配
preg_match($pattern, $subject, $matches);
`$pattern` 是正則表達(dá)式模式;
`$subject` 是要匹配的字符串;
`$matches` 是一個(gè)數(shù)組,用于存儲(chǔ)匹配結(jié)果。
$str = 'apple banana cherry';
$pattern = '/\ba\w*\b/';
if (preg_match($pattern, $str, $matches)) {
echo '匹配到的值:' . $matches[0];
} else {
echo '未匹配到任何值';
}