您的位置:首页 > 其它

使用正则表达式进行匹配

2017-11-03 11:07 337 查看

用m//进行匹配

m//可以任意符号作为定界符 与qw类似 而使用//可以省略m

经常使用花括号{}作为定界符

#模式匹配修饰符

要写在//后面 如//i //s等

/i大小写无关匹配

/s匹配任意字符 点号“.”原本不匹配换行符,/s可使点号匹配任何字符

/x忽略空格,方便阅读

如/-?[0-9]+.?[0-9*]/不方便阅读

若使用/x 则/-? [0-9]+ .? [0-9*]/x

或\

-?

[0-9]+

.?

[0-9]*

\x

#组合选项修饰符

连在一起写在末尾 如//isx

#锚位

正则默认从字符串开头读取,若未匹配成功,则会在下一个字符继续尝试

“\A”绝对开头读取

“\Z”绝对末尾读取

且都不会继续尝试

#单词锚位

每个单词的锚位

#绑定操作符=~

之前正则表达式只能匹配默认变量_everything=~/ / 可匹配任何变量

#模式中的内插

#捕获变量

在用括号捕获字符串后,可以用 12 34 等变量表示出来

$_="hello my,neighbor"
if(/(\s+)(\s+),(\s+)/){
print"words are $1 $2 $3";  #结果为hello my neighbor
}


#捕获变量的存活期

只有在匹配成功后才会覆盖掉之前匹配的值,若失败则不会改变

$cap="123";
$cap=~/([0-9]+)/;     #匹配成功  $1等于123
$cap=~/([a-zA-Z])+/;  #匹配失败  $1不改变 还是123


#不捕获模式

若不需要捕获变量,仅为了分组为整体字符串

可以写为(?:内容) 来表示不需要捕获

#命名捕获

因通过12 3不容易分辨,则可以给捕获组命任意名字写法为(?<名字>捕获内容)而提取变量时写法为+{名字}

#自动捕获变量

三个无需括号捕获的“免费”提取变量

分别是 &
$'

匹配区间中的内容存到 $& 内

匹配区间前的内容存到 $


匹配区间后的内容存到 $’ 内

#通用量词

之前提到过 * + ? 这三个量词,若不满足使用则

还有一种量词 花括号{}

{3}表示为只能出现三次

{3,}表示为能出现三次或三次以上

{,3}表示为能出现三次或三次以下

#优先级

操作优先级

#模式测试程序

while(<>){

chomp;

if(/匹配内容/){

print”|‘<&>$’|\n”;

}else{

print”no match”;

}

}

以上这个程序可以检测字符串能否被匹配以及在什么位置上被匹配

匹配位置在尖括号< >
8f71
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式