正则表达式之元字符:
.匹配除/n外的任意一个字符
/转义符
正则表达式之量词:
{3} 匹配前一单元的三个
*?{0, }? 匹配前一单元的零个或多个
+?{1, }? 匹配前一单元的一个或多个
??{0,1}? 匹配前一单元的零个或一个
* {0, } 匹配前一单元的多个或零个贪
+ {1, } 匹配前一单元的多个或一个贪
? {0,1} 匹配前一单元的一个或零个贪
正则表达式之编组:
() 编组且触发记忆
(?:) 编组但不触发记忆
正则表达式之多个选择:
|
正则表达式之文法和算符优先级:
'()', '(?: )' >
'*', '*?', '+', '+?', '?','??', '{}', '{}?' >
'' >
'|'
<regexp>-> <regexp>'|'<concat> |<concat>
<concat>-> <concat><repeat> |<repeat>
<repeat>-> <repeat>('*' | '+' | '?' |'{'<int>'}') | <paren>
<paren> -> '('<regexp>')' |'(?:'<regexp>')' | <char>
正则表达式之字符类:
[abcwxyz]== [a-cw-z]
/d== [0-9]
/D== [^0-9]
/w== [a-zA-Z0-9_]
/W== [^a-zA-Z0-9_]
/s== [/f/t/n/r ]
/S== [^/f/t/n/r ]
正则表达式之选项修饰符:
/i使匹配大小写不敏感
/s使.匹配任意字符,包含'/n',等价于[/d/D]
/x允许正则表达式中用空白和注释来增强可读性,空格文字和制表符文字等等将被忽略,只能用/s、/t等表示。
/m匹配多行目标串时,改^和$的意义为行首锚和行尾锚
/g无重叠全局替换修饰符
正则表达式之锚:
^ 串首锚
$ 串尾锚
/b单词边界锚参考/w
/B非单词边界锚
正则表达式之绑定算子:
=~非赋值运算符也,绑定运算符也,It's曰ing:不处理$_了,处理我左边的那个家伙
正则表达式插值:
双引插值规则
正则表达式之匹配变量
()不仅用于正则表达式的编组,也触发匹配引擎的记忆,引擎会将整个匹配段中与括号内正则表达式对应 的那部分存入记忆体内。
自1编号,引用以$1,$2,...
记忆至下一次匹配成功时结束
$&$MATCH 整个匹配段
$`$PREMATCH 匹配段之前的子串
$'$POSTMATCH匹配段之后的子串
正则表达式举例:
/^fred|barney$/要么以fred打头,要么以barney结尾的串
/^(fred|barney)$/
/(wilma|pebbles?)/
/^fred|barney$/m
正则表达式之文本处理之替换:
分隔符规则:
s#^https://#http://#;
s{fred}{barney};
s[fred](barney);
s<fred>#barney#;
绑定算子:
=~
大小写切换:
/U此处起至/E全部大写
/L此处起至/E全部小写
/u下一个字母大写
/l下一个字母小写
举例:
s/(bush|mandola)//u/L$1/ig
正则表达式之split算子
语法:
split/PATTERN/, EXPR, LIMIT
以/PATTERN/分割EXPR,最多分成LIMIT份
若LIMIT省略且尾部为空串,则丢弃它
若LIMIT为负值,则视其为无穷大
EXPR缺省为$_
/PATTERN/缺省为//s+/
正则表达式之列表环境下的m//:
返回引擎记忆体中的变量。
my$data = "Barney Rubble Fred Flintstone Wilma Flintstone";
my%last_name = ($data =~ /(/w+)/s+(/w+)/g);
my@arr = ($data =~ /(/w+)/s+(/w+)/g);
正则表达式之匹配多行文本:
^和$普通模式下是串首锚和串尾锚,在/m(多行模式)下为行首锚和行尾锚
/A匹配串首,/Z匹配串尾
/^nat/m=== /^nat|/nnat/
openFILE, $filename
ordie "Can't open '$filename': $!";
my$lines = join '', <FILE>;
$lines=~ s/^/$filename: /gm;
正则表达式之更新多个文件:
钻石符号<>的魔力:他会自动地为你打开和关闭在命令行指定的一系列文件,
若命令行没有指定任何文件名,
他就打开标准输入。
$^I会改变<>的行为,若$^I不是undef,则<>会将文件重命名以"文件名" .
"$^I",然后创建名为"文件名"的文件,然后打开重命名后的文件以读,
打开新建的文件以写。