$alerttext1 =~ s/\*/ANYCHARACTERS/g;
my $regex = qr/\Q$alertext1\E/i; #將所有的元字符都預先轉義
# \Q 在non-word 字符前加上\,直到\E
# \E 結束\L,\E 和\Q
$regext =~ s/ANYCHARACTERS/.*/g;
if($text1 =~ $regex ...
Perl中的元字符如下:\A 只匹配字符串開(kāi)頭
\b 匹配單詞邊界
\B 匹配單詞邊界之外的任意字符
\d 匹配數字字符,它與[0-9]相同
\D 匹配非數字字符
\s 匹配空白字符
\S 匹配非空白字符
[] 包圍一個(gè)字符類(lèi),字符類(lèi)包括:[0-9] [a-z] [a-zA-Z] 等類(lèi)似。
() 包圍一個(gè)字符分組或定義一個(gè)反引用
$ 匹配行尾
^ 匹配行首
* 匹配前面的子表達式零次或多次。要匹配 * 字符,請使用 \*
+ 匹配前面的子表達式一次或多次。要匹配 + 字符,請使用 \+
匹配前面的子表達式零次或一次,或指明一個(gè)非貪婪限定符 \?
. 匹配除換行之外的任何字符
\ 引出下一個(gè)元字符
\w 匹配任何只包含下劃線(xiàn)和字母數字字符的字符串,它與 [a-zA-Z0-9_]相同
\W 匹配沒(méi)有下劃線(xiàn)和字母數字字符的字符串
這些元字符的優(yōu)先級如下:
1.在此優(yōu)先級表的最頂端是括號:(()),在分組和引用內存值的時(shí)候使用。括號內部的任何部分比括號外的部分結合更緊密。
2.第二級是數量詞。這里有星號(*), 加號(+),問(wèn)號(?)以及由花括號表示的數量詞,如{5,15}, {3, }, {5}等。它們通常和前一項元素結合。
3.第三級的是錨定和序列(sequence)。錨定包括(^) 表明字符串的開(kāi)頭,($)表明結尾,(\b)詞界符,(\B)非詞界符。序列(一個(gè)元素緊接著(zhù)一個(gè)元素)實(shí)際上是一種操作,雖然它沒(méi)有使用元字符。這段話(huà)的含義是一個(gè)單詞中的字母結合更緊密,就像錨定緊貼字母一樣。
4.優(yōu)先級最低的是豎線(xiàn)(|),表示或。由于其優(yōu)先級最低,它通常將模式劃分成幾個(gè)部分。它在優(yōu)先級最底端是因為我們希望像|/fred|barney/里面的字母比或(|)結合更緊密。如果或(|)的優(yōu)先級比序列的優(yōu)先級更高,那么,上述模式的含義是匹配fre,接著(zhù)是d 或者b, 然后是arney。因此,或(|)的優(yōu)先級最低,字母序列的優(yōu)先級要高些。
除了優(yōu)先級表外,還有被稱(chēng)為原子(atoms)的東西,它們組成模式最基本的塊。它們是單個(gè)字符,字符類(lèi),以及后引用(backreference)。