反斜杠
- 三类功能
- 放在元字符之前时,撤销此元字符的特殊含义,使此元字符仅仅匹配其自身。
- \ 与后续字符组合成某类字符组时,常用的模式如下:
模式 | 含义 |
---|---|
\d | 数字的集合,等价于[0-9] |
\D | 非数字的集合,等价于[^0-9] |
\n | 换行符,其实就是\n字符本身 |
\s(小写字符s) | 空格字符 |
\S(大写字符S) | 非空格字符 |
\t | 水平制表符Tab,其实就是\t字符本身 |
\w(小写字符w) | 数字、字符和下划线的组合,等价于[_0-9a-zA-Z] |
\W(小写字符W) | 除了\w所表示的字符以外的字符,等价于[^_0-9a-zA-Z] |
- \与后续字符组合成某类锚位,用来匹配位置
模式 | 含义 |
---|---|
\A | 字符串的开头位置 |
\b | “单词”的边界。“单词”由数字、字母和下划线组成。边界指整个字符串的开头或者结尾,或者“单词”与“非单词”之间的位置(没有宽度的) |
\z (小写字符z) | 字符串的结尾位置 |
\Z (大写字符Z) | 字符串的结尾位置、或者行结尾,即换行符之前的位置,等价于处在模式结尾处的$ |
修饰符
- 在模式的尾部/之后,可以添加一些修饰符,调整模式的匹配功能
修饰符 | 含义 | 模式 |
---|---|---|
i | 大小写无关 | /abc/i |
s | 使句点号.匹配换行符\n | /a.*b/s |
x | 忽略模式中的空格 | /a b/x |
- x会忽略模式中包含的空格,使我们可以把很长的模式(可读性较差)以(任意数量的)空格或换行符分割开。
- 有了修饰符x,我们不仅可以添加一些空格或者换行,还可以在模式中添加注释#,进一步提高代码可读性。
- 添加注释时,需要注意两点:
- 注释中不能出现模式的终止符号,上例中是/
- 如果添加了#注释,那么原先模式中的#,则需要换成#或者[#]。
内插变量
- 模式的内容都是我们预先写好的,它们是固定的。如果有很多种模式需要匹配,可以直接编写变量名。
分组和捕获(grouping capturing)
- 捕获后的变量 $1
- 反向引用 \1
替换
-
$str =~ s/regular experssion/replacemnt/
- 替换一次
-
$str =~ s/regular experssion/replacemnt/
- 全部替换
-
界定符
- 模式匹配的界定符,除了最常用的/,还可以是其他成对的括号,或者其他字符。那么在替换模式中,事实上有两组界定符,它们可以是不同也可以是相同的。
- s{regular experssion}{replacement}
- s{regular experssion}
-
不改变原变量
- 如果不希望改变左侧变量的值,则需要先复制一份:
$str1 = "abcde abcde";
$str2 = $str1;
$str2 =~ s/bcd/BCD/;
#可以简写成:
($str2 = $str1)=~ s/bcd/BCD/;