一文詳解正則表達(dá)式中的特殊符號(hào)
正則表達(dá)式中的特殊符號(hào)
如:
preg_match('/.+?hxx/is', hxx));
返回,0,表示沒有匹配,這是因?yàn)?.+?的作用,具體講一下。
.的作用
- 作用:匹配除換行符(
\n)以外的任意單個(gè)字符。 - 修飾符影響:當(dāng)使用
s修飾符(單行模式)時(shí),.也能匹配換行符。
如:
preg_match('/a.b/', acb));
- 有.時(shí):可以匹配像
aab、acb、a b這樣的字符串,因?yàn)?code>.可以匹配任意字符(除了換行符,除非使用s修飾符)。 - 無(wú).時(shí)(例如
/ab/):只能匹配ab,不能匹配中間有其他字符的情況。
+的作用
- 作用:匹配前面的子表達(dá)式一次或多次(貪婪模式,盡可能多地匹配)。
- 組合使用:當(dāng)與
?組合成+?時(shí),表示非貪婪模式(盡可能少地匹配)。
如:
preg_match('/a+/', aaa));
- 有+時(shí):可以匹配一個(gè)或多個(gè)連續(xù)的
a,如a、aa、aaa等。 - 無(wú)+時(shí)(例如
/a/):只能匹配單個(gè)a,不能匹配多個(gè)。
?的作用
- 作用:
- 單獨(dú)使用時(shí):匹配前面的子表達(dá)式零次或一次(即前面的內(nèi)容是可選的)。
- 緊跟在量詞(如
*、+、?、{n}等)后面時(shí):將貪婪模式轉(zhuǎn)換為非貪婪模式(最小匹配)。
情況1:?jiǎn)为?dú)使用
如:
preg_match('/a?b/', ab));
- 有?時(shí):可以匹配
b(因?yàn)?code>a出現(xiàn)0次)或ab(a出現(xiàn)1次),但不能匹配aab。 - 無(wú)?時(shí)(例如
/ab/):只能匹配ab,不能匹配b。
情況2:作為非貪婪修飾符(與量詞組合)
如:
preg_match('/a+?b/', aab));
- 有?(非貪婪模式)時(shí):在字符串
aaab中,會(huì)匹配aab(因?yàn)?code>+?會(huì)盡可能少地匹配,只匹配一個(gè)a,然后遇到b就停止)。 - 無(wú)?(貪婪模式)時(shí):在字符串
aaab中,會(huì)匹配整個(gè)aaab(因?yàn)?code>+會(huì)盡可能多地匹配)。
*的作用
- 有\(zhòng)*: 允許前面的元素出現(xiàn)0次或多次。即該元素可以沒有,也可以重復(fù)多次。
- 無(wú)\*: 前面的元素必須恰好出現(xiàn)一次(如果沒有其他量詞修飾的話)。
如:
preg_match('/ab*c/', 'ac'); // 匹配 "ac"(b出現(xiàn)0次)
// 匹配 "abc"
// 匹配 "abbbbc"
^的作用
作用:
- 匹配字符串的開始位置
- 在多行模式(
m修飾符)下也匹配每行的開頭
如:
preg_match('/^abc/', 'abc'); //匹配 "abc123"
//不匹配 "123abc"
$的作用
作用
- 匹配字符串的結(jié)束位置
- 在多行模式(
m修飾符)下也匹配每行的結(jié)尾
如:
preg_match('/abc$/', 'abc'); //不匹配 "abc123"
//匹配 "123abc"
綜合對(duì)比表
| 元字符 | 示例表達(dá)式 | 匹配行為 | 示例輸入 | 匹配結(jié)果 |
|---|---|---|---|---|
. | /a.b/ | 匹配任意單個(gè)字符(除換行符) | aXb | 匹配aXb |
無(wú). | /ab/ | 只能匹配字面ab | aXb | 不匹配 |
+ | /a+/ | 匹配1個(gè)或多個(gè)a | aaa | 匹配整個(gè)aaa |
無(wú)+ | /a/ | 只能匹配單個(gè)a | aaa | 只匹配第一個(gè)a |
?(單獨(dú)) | /a?b/ | a出現(xiàn)0次或1次 | b | 匹配b |
無(wú)? | /ab/ | 只能匹配ab | b | 不匹配 |
+? | /a+?b/ | 非貪婪匹配:盡可能少地匹配a | aaab | 匹配aab(從第二個(gè)a開始) |
+(無(wú)?) | /a+b/ | 貪婪匹配:盡可能多地匹配a | aaab | 匹配整個(gè)aa |
^ | /^a/ | 匹配出現(xiàn)在開頭的a | a | 匹配到了開頭的 a |
總結(jié)
就是最近經(jīng)常遇到一些這類的 特殊符號(hào),搞不懂什么意思,網(wǎng)上也沒有很全面的教程,就問al,自己總結(jié)了一下。
到此這篇關(guān)于正則表達(dá)式中特殊符號(hào)的文章就介紹到這了,更多相關(guān)正則表達(dá)式特殊符號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
正則表達(dá)式替換table表格中的樣式與空標(biāo)記(保留rowspan與colspan)
最近幾天的勞動(dòng)成果,用正則表達(dá)式去除表格中的樣式與class方便后臺(tái)編輯的操作,在編寫過(guò)程中不斷進(jìn)步,后續(xù)將不定時(shí)更新,需要的朋友可以參考下2020-04-04
經(jīng)典Javascript正則表達(dá)式[優(yōu)質(zhì)排版]
正則表達(dá)式用于字符串處理,表單驗(yàn)證等場(chǎng)合,實(shí)用高效,但用到時(shí)總是不太把握,以致往往要上網(wǎng)查一番。我將一些常用的表達(dá)式收藏在這里,作備忘之用2013-01-01
正則表達(dá)式regular expression詳述(二)
正則表達(dá)式regular expression詳述(二)...2006-06-06
PHP正則表達(dá)式基本函數(shù) 修飾符 元字符和需轉(zhuǎn)義字符說(shuō)明
寫在前面:PHP正則的執(zhí)行效率并不高,而且比較耗資源,能不能則不用。2010-07-07

