博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【初学小骆驼】以正则表达式进行匹配
阅读量:7000 次
发布时间:2019-06-27

本文共 1781 字,大约阅读时间需要 5 分钟。

定界符、非定界符

m(fred)、m<fred>、m{fred}、m[fred]
用双斜线//可以省略m
 
可选修饰符
/i  匹配不区分大小写
/s  匹配任意字符,修补了点号.不能匹配换行符
/x  匹配空白,使得阅读更容易,但是里面的空白被忽略。
其中要表示真正的井号#时用
\#
[#]
/barney.*fred are good friends/
six  ------>组合修饰符
 
锚定
脱字符^锚定字符串的开头,
美元符号$锚定字符串的结尾。
example,/^\s*$/匹配空白行。
单词锚定
\b  单词边界锚定  /\bFred\b/匹配Fred。注:用\b匹配的单词边界是字符集,不算符号。
\B  非单词边界锚定,匹配所有\b不能匹配的位置。
绑定操作符
=~  让右边的模式来匹配左边的字符串
 
模式串中的内插
正则表达式里可以进行双引号形式的内插。
#!/usr/bin/perl -w
my $what = "larry";
while (<>){
  if (/^($what)/){ # 模式的锚位被定在字符的开头
    print "We saw $what in begining of $_";
  }
}
 
捕获变量
是把部分字符串暂时记下来,如果有一个以上的圆括号,就会有一次以上的捕获。每个被捕获的对象是原本的字符串,而不是模式。
my $dino="I fear that I'll be extinct after 1000 years.";
if ($dino =~ /(\d*) years/){
  print "That said 
'$1' years.\n";   #$1是1000.
捕获变量通常可以存活到下次成功的模式匹配为止。
 
不捕获模式
在左括号后加
问号和冒号(?:),说明这里的一对括号是为了分组而存在。
if (m/(?:bronto)? saurus (steak|burger)/) {
  print "Fred wants $1.\n";
}
 
命名捕捉
捕捉的结果进入一个
特殊的哈希%+,其中key就是捕捉时候使用的特殊标签,value是被捕获的串。
写法是
(?<LABLE>PATTERN),LABLE自行命名,第一个捕捉标签是
name1,第二个是
name2。使用捕获串时访问的位置变成了
$+{name1}和$+{name2}
use 5.010;
 
my $name='Fred or Barney';
if($names=~m/(?<name1>\w+) (?:and|or) (?<name2>\w+)/){
  say "I saw $+{name1} and $+{name2}";
}
 
另一种写法是
\g{lable}
use 5.010
 
my $names='Fred Flinstone and Wilma Flinstone';
if($names=~m/(?<last_name>\w+) and \w g\{last_name}/){
  say "I saw $+{last_name}";
}
\k{lable}等同于
\g{lable}
 
自动匹配变量
字符串实际匹配的部分会被自动存进
$&,匹配位置之前的字符串存入
$`,匹配位置之后的存入
$'
 
通用量词
/a{5,15}/匹配重复5到15次的字母a。
 
优先级
1.圆括号(分组或者捕获)    (...),(?:...),(?<lable>...)
2.量词                      a*  a+  a?  a{n,m}
3.锚位和序列                abc  ^a  a$
4.择一                      a|b|c
5.元素                      a  [abc]  \d  \1
/(wilma|pebbles?)/匹配到wilma、pebbles以及pebble这三个字符串。
 
模式测试程序
#!/usr/bin/perl
while(<>){                         #每次读一行输入
  chomp;
  if (/YOUR_PATTERN_GOES_HERE){
    print "Matched:|$`<$&>$'|\n";  #特殊匹配变量
}else{
  print "No match:|$_|\n";
  }
}

转载于:https://www.cnblogs.com/amamiyaryou/archive/2012/06/21/2557536.html

你可能感兴趣的文章
viewstate加密(转)
查看>>
nginx 设置websocket支持
查看>>
数字逻辑之逻辑符号、逻辑电路图、真值表
查看>>
vim的停止回显
查看>>
InputStream流解析 XML文件
查看>>
软考 (二) 复习技巧
查看>>
Centos 6.5 磁盘修复 破解删除root密码
查看>>
某游戏浏览器Flash加速dll调用,打造我们自己的Flash加速器
查看>>
js Date对象
查看>>
求每个数的质因子
查看>>
五.hadoop 从mysql中读取数据写到hdfs
查看>>
ios开发之--WKWebView的使用
查看>>
JS中的闭包问题总结
查看>>
XML序列化与反序列化
查看>>
运动背景下的运动目标检测
查看>>
定义jsp页面默认编码格式
查看>>
谈谈java的BlockingQueue
查看>>
poj2440
查看>>
告别我的OI生涯
查看>>
Redis数据操作命令
查看>>