结构
|
含义
|
结构
|
含义
|
/n
|
换行符
|
/”
|
双引号
|
/f
|
换页符
|
/L
|
以后所有字母小写直到/E
|
/r
|
回车
|
/l
|
下一字母大写
|
/b
|
回退
|
/u
|
下一字母大写
|
/t
|
水平制表符
|
/U
|
以后所有字母大写直到/E
|
/v
|
垂直制表符
|
/E
|
结束/L或/U
|
/a
|
响铃
|
|
|
/e
|
Esc
|
|
|
/007
|
任一八进制ASCII值(这里007=bell)
|
|
|
/X7F
|
任一十六进制ASCII值(这里7f=delete)
|
|
|
/cC
|
任一“控制”字符(这里是控制字符C)
|
|
|
/ /
|
反斜杠
|
|
|
比较
|
数字
(比较数字本身的大小)
|
字符串
(
比较的是字符串中字符的
ASCII
值
)
|
等于
|
=
|
eq
|
不等于
|
!=
|
Ne
|
小于
|
<
|
Lt
|
大于
|
>
|
Gt
|
小于等于
|
<=
|
le
|
大于等于
|
>=
|
Ge
|
大于等于小于
|
<=>
|
Cmp
|
注意数字和字符串比较都正好与UNIX test命令相反。该命令对数字比较采用-eq,而字符串比较用=.
|
序号
|
相关性
|
运算符
|
1
|
无
|
“list”运算符
|
2
|
左
|
,(逗号)顺序计值符
|
3
|
右
|
+=
|
4
|
右
|
?:
(三态if/then/else
运算符)
|
5
|
无
|
.. (域运算符,列表构造器)
|
6
|
左
|
||
|
7
|
左
|
&&
|
8
|
左
|
|^
|
9
|
左
|
&
|
10
|
无
|
= =! = <=> eq ne cmp (“等于”运算符)
|
11
|
无
|
< <= > >= lt le gt ge (“不等于”运算符)
|
12
|
无
|
已命名一元运算符
|
13
|
无
|
-r及其它(文件测试运算符)
|
14
|
左
|
<< >>位移
|
15
|
左
|
+ - .(加,减,串连接)
|
16
|
左
|
* / % x(乘,除,取模,串复制)
|
17
|
左
|
= ~ ! ~ 匹配,不匹配
|
18
|
右
|
* * (
乘幂)
|
19
|
右
|
! -
(逻辑非,按位非,数字非)
|
20
|
无
|
++ --(自动加,自动减)
|
序号
|
控制语句
|
表达式修改器
|
符号控制器(
&&,||,?:
)
|
1
|
if(this){that}
|
that if this
|
this&&that
|
|
if(exp1){ exp2}else(exp3)
|
|
exp1?exp2:exp3
|
2
|
unless(this){that}
|
that unless this
|
this || that
|
3
|
while(this){that}
|
that while this
|
|
4
|
until(this){that}
|
that until this
|
|
3
|
for(i=1;$i<=10;$i++){that}
|
|
|
4
|
foreach$i(@some_list){that}
|
|
|
单
字
符
模
式
|
字符与自身匹配的单个字符。
|
|
||
字符”.”,与除换行符(/n)之外的任何单字符相匹配。
即非换行符
|
|
|||
模式匹配“字符类”由一对开闭方括号和括号内的字符列表组成。根据匹配模式,这些字符中的一个且仅有一个将与字符串中的相应部分进行匹配操作。
|
/[abcde]/:与小写字母表前五个字母中的一个相匹配;
/[abiouAEIOU]/:与小写或大写的五个元音字母相匹配;
/[0-9/-]/:匹配0-9,或减号。
/[]a]/或/[a/]]/:右方括号要么作为列表中的第一个字符;要么在其前加一反斜杠。
|
|||
/d(数字) [0-9]
|
/D(非数字) [^0-9]
|
|||
/w(字符) [a-z A-Z0-9_ ]
|
/W(非字符) [^a-z A-Z0-9_ ]
|
|||
/s(空格) /r/t/n/f]
|
/S(非空格) [^a-z A-Z0-9_ ]
|
|||
组
合
模
式
|
序列
|
|
||
倍增器,有多个时,以“左优先”。
|
限定符 *
|
后面紧跟
零个或多个该字符(字符类);
|
||
限定符 ?
|
后面紧跟
零个或一个该字符;
|
|||
限定符 +
|
后面紧跟一个或多个该字符;
|
|||
用作记忆功能的圆括号
|
限定符 ( )
|
用反斜杠加一个整数来检索已记忆的字符串部分。
|
||
|
限定符 {n}
|
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
|
||
限定符 {n,}
|
n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
|
|||
限定符 {n,m}
|
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
|
|||
|
|
定位符
$`:$&:$'/n
|
/b 表示单词的末尾。例:"er/b"和"never"的"er"一致,但和"verb"的"er"不一致。
/B 表示非单词的末尾。 $:c$表示以c为结尾的字符串;如果是变量可以将$放在其前面如:$path =~/$$vob/。
^:在字符的前面,与含以该字符打头的字符串相关匹配。如^a表示以a为开头的字符串。
|
|
交替
|
|:
|
|||
匹配操作符
|
|
忽略大小写
|
最后一个斜杠后加上一个小i /i
|
|
选择不同的目标
|
$a=”hello.world”;
$a=~/^he/
|
|||
使用不同分界
|
当正则表达式中,Perl允许用户制定不同的分界符。作为分界符的字符必须为非字符或数字,并在其前加上m,然后就可在模式的后面直接使用此分界符。
|
|||
|
|
插入变量
|
$sentence=~/$what/
|
|
|
|
特殊的只读变量
|
$_: 默认的输入/输出和格式匹配空间
$&:表示字符串与正则表达式相匹配的部分;
$`:表示字符串中相匹配之前的部分;
$’ :表示字符串中相匹配之后的部分;
[$`在上个格式匹配信息前的字符串;
$’ 在上个格式匹配信息后的字符串 ] $+ 与上个正则表达式搜索格式匹配的最后一个括号 $ 含有与上个匹配正则表达式对应括号结果
Exp:
$_=”this is a test”;
/(/w+)/W+(/w)/#匹配前两个单词
#$1现在为”this”,而$2为”is”。
C:/>perl -e "print $^O;";
MSWin32 注意,这里这个特殊变量$^O 最后一个字符是字母O,且大写。 如果是在linux下的话,结果就不是MSWin32了,而是Linux ; 这是一个判断环境的变量,简单实用。 perl的内置特殊变量还有很多的,例如常用的还有@_、@ARGV、$ARGV、%INC、%ENV等等,有很多,不可能一一列举了,这里给出一个比较有总结性的列表,是chinaunix上perl社区的一个网友总结的,还算比较全: $- 当前页可打印的行数,属于Perl格式系统的一部分 $! 根据上下文内容返回错误号或者错误串 $” 列表分隔符 $# 打印数字时默认的数字输出格式 $$ Perl解释器的进程ID $% 当前输出通道的当前页号 $& 与上个格式匹配的字符串 $( 当前进程的组ID $) 当前进程的有效组ID $* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之. $, 当前输出字段分隔符 $. 上次阅读的文件的当前输入行号 $/ 当前输入记录分隔符,默认情况是新行 $: 字符设置,此后的字符串将被分开,以填充连续的字段. $; 在仿真多维数组时使用的分隔符. $? 返回上一个外部命令的状态 $@ Perl解释器从eval语句返回的错误消息 $[ 数组中第一个元素的索引号 $/ 当前输出记录的分隔符 $] Perl解释器的子版本号 $^ 当前通道最上面的页面输出格式名字 $^A 打印前用于保存格式化数据的变量 $^D 调试标志的值 $^E 在非UNIX环境中的操作系统扩展错误信息 $^F 最大的文件捆述符数值 $^H 由编译器激活的语法检查状态 $^I 内置控制编辑器的值 $^L 发送到输出通道的走纸换页符 $^M 备用内存池的大小 $^O 操作系统名 $^P 指定当前调试值的内部变量 $^R 正则表达式块的上次求值结果 $^S 当前解释器状态 $^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间 $^W 警告开关的当前值 $^X Perl二进制可执行代码的名字 $_ 默认的输入/输出和格式匹配空间 $| 控制对当前选择的输出文件句柄的缓冲 $~ 当前报告格式的名字 $` 在上个格式匹配信息前的字符串 $’ 在上个格式匹配信息后的字符串 $+ 与上个正则表达式搜索格式匹配的最后一个括号 $< 当前执行解释器的用户的真实ID $ 含有与上个匹配正则表达式对应括号结果 $= 当前页面可打印行的数目 $> 当前进程的有效用户ID 包含正在执行的脚本的文件名 $ARGV 从默认的文件句柄中读取时的当前文件名 %ENV 环境变量列表 %INC 通过do或require包含的文件列表 %SIG 信号列表及其处理方式 @_ 传给子程序的参数列表 @ARGV 传给脚本的命令行参数列表 @INC 在导入模块时需要搜索的目录列表 $-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置 。 |
|
|
|
替换
|
s/旧的正则表达式/新串/;
如果需要匹配所有匹配的字符串而不仅仅是第一个,只需在操作符的后面加上“g”。
和匹配操作符一样,如果不方便使用斜杠作为分界符,可以选择其它符号替换匹配操作符,只需使用同一字符三次即可。
$_=”this is a test”;
s/(w+)/<$1>/g; # $_现在为” |
|
|
|
分割转组操作符
|
Split(/分隔符/, 变量)
默认模式:@words=split;#与@words=split(//s+/,$_)相同
注:如果需要引用空格作为分界符最好用/ +/ 或//s+/
Join()操作符:$a=join($glue,@list); $b=join(“:”,@fields);
|
序号
|
文件测试
|
意义
|
|
-r
|
文件或目录可读
|
|
-w
|
文件或目录可写
|
|
-x
|
文件或目录可执行
|
|
-o
|
文件或目录归用户所有
|
|
-R
|
文件或目录对真正的用户可读,而不是有效用户(不同于 –r 对setuid程序)
|
|
-W
|
文件或目录对真正的用户可写,而不是有效用户(不同于 –w 对setuid程序)
|
|
-X
|
文件或目录对真正的用户可执行,而不是有效用户(不同于 –x 对setuid程序)
|
|
-O
|
文件或目录归f真正的用户所有,而不是有效用户(不用于-o 对setuid程序)
|
|
-e
|
文件或目录存在
|
|
-z
|
文件存在且大小为0(目录从不为空)
|
|
-s
|
文件或目录存在且大小不为0(数值为字节数)
|
|
-f
|
登录项为纯文件
|
|
-d
|
登录项为路径
|
|
-l
|
登录项为symlink
|
|
-S
|
登录项为 socket
|
|
-p
|
登录项为已命名的pipe(fifo,即先进先出)
|
|
-b
|
登录项为特殊块的文件(像可装配的磁盘)
|
|
-c
|
登录项为特殊字符的文件(像I/O设备)
|
|
-u
|
文件或目录是设备用户ID号
|
|
-g
|
文件或目录是设备用户组ID号
|
|
-k
|
文件或目录有 sticky位设置
|
|
-t
|
文件句柄中的isatty()为真
|
|
-T
|
文件是文本格式
|
|
-B
|
文件是二进制格式
|
|
-M
|
以天为单位修改年龄
|
|
-A
|
以天为单位访问年龄
|
|
-C
|
以天为单位
inode
修改年龄
|
这些操作符的参数文件句柄或文件名。默认的操作数是$_变量中定义的文件名。
Foreach(@list){
Print “$_ is readable /n” if –r
}
Stat()、Lstat( )的操作数是一个文件句柄,或者相当于文件名的表达式。返回值要么是undef,指示stat失败,要么是有13个值的数组。默认操作数是$_。
对于符号链接的名字申请stat()返回符号链接所批之处的信息,而不 关于符链接本身信息(除非链接本所指的是没有可访问的内容)Lstat( )返回链接本身的信息。
|
字段句柄类型
|
字段类型符(以@或^开始,紧随之的指示字段的类型,字符数(含@或^)为字段的宽度。)
|
|
文本字段
|
’<’、’|’、’>’(分别表示左对齐;中间对齐;右对齐。)
|
|
数字字段
|
以@开始,紧跟着#及可选的小数点。
|
|
多重字段
|
@*:表示将结果变量值按其换行符换行输出。
|
|
填充字段
|
以^
开始,紧跟着’<’、’|’、’>’(分别表示左对齐;中间对齐;右对齐。)
如果文本少于三行,将出现空行,可以在前面添加
~
符号自动去除空行。
如果文本多于三行,将被截断,可以在前面添加 ~~ 符号自动增长并自动去除空行。 |
|
操作
|
标准输入
|
标准输出
|
标准错误
|
是否等待
|
System( )
|
由程序中继承
|
由程序中继承
|
由程序中继承
|
是
|
Backquoted 串
|
由程序中继承
|
作为串值捕获
|
由程序中继承
|
是
|
文件句柄输出时的open()命令
|
连接到文件句柄
|
作为串值捕获
|
由程序中继承
|
只在close( )时等待
|
文件句柄输入时的open()命令
|
由程序中继承
|
连接到文件句柄
|
由程序中继承
|
只在close( )时等待
|
Fork,exec,wait
|
用户选定
|
用户选定
|
用户选定
|
用户选定
|