正則表達(dá)式是Perl內(nèi)嵌的一個(gè)微型編程語言
使用簡(jiǎn)單模式
匹配對(duì)象是$_內(nèi)容,那模式本身就是一串簡(jiǎn)單的字符串序列,把模式寫在/中.
$_ = "asda";
if(/asad/)
{...}
Unicode屬性
Unicode每個(gè)字符除了字節(jié)組合外,還有屬性信息,除了匹配字符本身,還可根據(jù)字符屬性來匹配。若要匹配某項(xiàng)屬性,只需把屬性名放入\p{PROPERTY},例如:
if(/\p{Space}/)
{...}
匹配空白符。
if(/\p{Digit}/)
{...}
匹配數(shù)字
將p改為大寫表示不匹配
if(/\P{Space}/)
{...}
不匹配空白符
元字符
.可以匹配除了換行符之外任意字符。如果想只是匹配.本身,要加上反斜線轉(zhuǎn)義。
簡(jiǎn)單量詞
- *能匹配前一個(gè)字符零次或者無數(shù)次。
例如
"fred\t*ban"
那么能匹配在fred和ban之間包含0次或者無數(shù)次制表符的字符串。
.*能匹配任意字符0次到無限次
+匹配前一個(gè)條目一次以上。
?匹配前一個(gè)條目只出現(xiàn)一次或者不出現(xiàn)
模式分組
- ()的作用是對(duì)字符串分組,使多個(gè)條目合并為一個(gè)條目。
/fred+/
#可以匹配freddddd
/(fred)+/
#可以匹配fredfredfred
/(fred)*/
#可以匹配hello,world
捕獲組
通過反向引用來引用圓括號(hào)中的模式所匹配的文字。反向引用是在反斜線后面接上數(shù)字編號(hào)
if(/(.)\1/)
{...}
#匹配連續(xù)重復(fù)出現(xiàn)的兩個(gè)字符"aa"
if(/y(....)d\2/)
{...}
#匹配yabccdabccabcc
在Perl5.10后可用\g{N}表示新的反向引用寫法。N表示要反向引用的組號(hào)。
if(/(.)\g{1}/)
{...}
擇一匹配
| 的意思是匹配左邊的內(nèi)容失敗了可以匹配右邊的內(nèi)容
/fred(|\t)+barney/
#(|\t)可能匹配空格或者制表符
這就可以匹配兩個(gè)名字之間至少要有一個(gè)空格或制表符
字符集
指一組可能出現(xiàn)的字符,通常寫在([])表示匹配字符集中出現(xiàn)的單個(gè)字符。
[a-zA-Z]
字符集的簡(jiǎn)寫
表示任意一個(gè)數(shù)字的字符集簡(jiǎn)寫是\d
/[/d]/
表示任意一個(gè)空白符的字符集是\s
/[\s]/ == /[\f\t\n\r]/
\h只匹配水平空白符,\v只匹配垂直空白符
\w匹配單詞字符
反義簡(jiǎn)寫
[^\d] == \D
#表示否定意義