perl中的元字符

时间:2021-03-31 22:46:51
 
$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    只匹配字符串开头
\b    匹配单词边界
\B    匹配单词边界之外的任意字符
\d    匹配数字字符,它与[0-9]相同
\D    匹配非数字字符
\s    匹配空白字符
\S    匹配非空白字符
[]    包围一个字符类,字符类包括:[0-9]  [a-z]  [a-zA-Z] 等类似。
()    包围一个字符分组或定义一个反引用
$    匹配行尾
^    匹配行首
*    匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
+    匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
?    匹配前面的子表达式零次或一次,或指明一个非贪婪限定符 \? 
.    匹配除换行之外的任何字符
\    引出下一个元字符
\w    匹配任何只包含下划线和字母数字字符的字符串,它与 [a-zA-Z0-9_]相同
\W  匹配没有下划线和字母数字字符的字符串

这些元字符的优先级如下:

1.在此优先级表的最顶端是括号:(()),在分组和引用内存值的时候使用。括号内部的任何部分比括号外的部分结合更紧密。

2.第二级是数量词。这里有星号(*), 加号(+),问号(?)以及由花括号表示的数量词,如{5,15}, {3, }, {5}等。它们通常和前一项元素结合。

3.第三级的是锚定和序列(sequence)。锚定包括(^) 表明字符串的开头,($)表明结尾,(\b)词界符,(\B)非词界符。序列(一个元素紧接着一个元素)实际上是一种操作,虽然它没有使用元字符。这段话的含义是一个单词中的字母结合更紧密,就像锚定紧贴字母一样。

4.优先级最低的是竖线(|),表示或。由于其优先级最低,它通常将模式划分成几个部分。它在优先级最底端是因为我们希望像|/fred|barney/里面的字母比或(|)结合更紧密。如果或(|)的优先级比序列的优先级更高,那么,上述模式的含义是匹配fre,接着是d 或者b, 然后是arney。因此,或(|)的优先级最低,字母序列的优先级要高些。

除了优先级表外,还有被称为原子(atoms)的东西,它们组成模式最基本的块。它们是单个字符,字符类,以及后引用(backreference)。