- 正则表达式, 就是用某种模式去匹配一类字符串的一个公式
语法
-
简单模式
如果模式匹配的对象是$_, 把模式卸载斜线之间(/partten/) -
例如, 如果$_中存在
World
,则打印It matched
。
$_ = "Hello World, I'm the regression";
if (/"World"/){printf "It matched"};
如果匹配项本身含有斜向,则使用反斜线进行转义
$_ = "the file is in C:/Perl/Target";
if (/"C:\/Perl\/Target"/){printf "the target fold is searched"};
Unicode
属性
- 利用字符的属性来匹配
\p{属性名}
表示包含该属性的模式
- 匹配空格、换行符,使用
Space
属性
\p{Space}
$_ = "Hello World, I'm the regression";
if (/\p{Space}/){printf "The string has some whitespace\n"};
- 匹配数字,使用
Digit
属性
\p{Digit}
$_ = "Hello World, I'm the regression 1";
if (/\p{Digit}/){printf "The string has digit\n"};
- 匹配十六进制数字,使用
Hex
属性
\p{Hex}
\P{属性名}
表示不包含该属性的部分
模式分组
- 括号、反斜线、数字可以组成捕获组的模式
- 括号内的内容作为元字符,用反斜线+数字,表示再次匹配N次
/(World)\3/
: 表示匹配 WorldWorldWorldWorld
/(Hello)(World)\1\2/
: 表示匹配 HelloWorldHelloWorldWorld
先对原字符串匹配一次,再进行:\1表示对Hello再匹配1次,\2表示对World再匹配2次
- 择一匹配
使用|
表示匹配时候的或
/Hello|World/
: 表示,任何包含Hello
或者 包含World
的字符串。
/Hello (|my) World/
: 表示,任何包含Hello my World
或者 包含Hello World
的字符串。
正则表达式中的元字符
- 元字符是一种特殊字符
- 起通配作用
元字符列表
-
字符类:单字符或数字
.
: 匹配除换行符外的任意字符
[a-z0-9]
: 匹配 集合中人以单个字符
[^a-z0-9]
: 匹配不在集合中简单任意单个字符
\d
: 匹配单个数字
\D
: 匹配非数字字符, 等价于[^0-9]
\w
:匹配数字型(字)字符
\W
:匹配非数字型(非字)字符 -
字符类:空白字符
\s
: 匹配空白字符,如 空格、制表符、换行符
\S
: 匹配非空白字符
\n
: 匹配换行符
\r
: 匹配回车符
\t
: 匹配制表符
\f
:匹配进纸符
\b
: 在[]
中时,匹配退格符 backspace
\0
: (\数字0)匹配空值字符 -
字符类:锚定字符
\b
: 不在[]
中时,匹配字边界
\B
: 匹配非字边界
^
: 匹配行首
$
: 匹配行尾
\A
:匹配字符串开头
\Z
: 匹配字符串或行的末尾
\z
:只匹配字符串末尾
\G
:匹配前一次m//g
-
字符类:重复字符
x?
: 匹配0个或1个x
x*
: 匹配0个或多个x
x+
: 匹配1个或多个x
(xyz)+
: 匹配1个或多个xyz
x(m,n)
: 匹配m个到n个x组成的值 -
字符类:替换字符
(was|were|will)
: 匹配was、were、will三者之一。 -
字符类:其他字符
\12
: 匹配八进制数
\x811
: 匹配十六进制数
\cX
:匹配控制字符, 如\cC
(Ctrl + C)
\e
: 匹配ASCII
\x{NUMBER}
: 匹配以十六进制形式给出的Unicode
模式匹配
- 得到“是否匹配”的结果, 返回值为1或0.
- 形式为:
m/<regexp>/
m 是 match 的缩写
或者写为:
/<regexp>/
m?<regexp>?
一个例子
$test = "China"
$target = ".*ina"
$test =~m/$target/
# 1
网友评论