Per正则表达式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– 正则表达式圆括号中匹配内容按左侧圆括号出 现的顺序依次赋给$1,$2,$3 等顺序变量 – $`、$&、$'、$1· · · 等都是全局变量,隐式local
2014-10-23
电子科技大学 生物信息学中心
15
"hello regular expression" =~ /((h.*)\s(r.*)\s(e.*))/;
第四章 课后作业
1. 请用Perl编写一个类似linux shell中uniq命令的脚本,请用 其读入在Chapter02文件夹中all_mimodb_peptides文件, 并找出所有出现且仅出现过一次的多肽,所有出现过多次
(即两次或两次以上)的多肽,并据此建立一个非冗余的
数据集。
2014-10-23
/i /m /s /x /o /g 忽略字母大小写 跨行匹配(让 ^ 和 $ 匹配随后嵌入的 \n) 让 . 匹配换行符并且忽略 $* 忽略空白并且允许在模式里的注释 只编译模式一次 全局地查找所有匹配
/e
把右边当作一个表达式计算
一个 s/// 操作符的返回值是它成功的次数(如果与 /g 修饰词一起使用,返回值可能 大于一)。如果失败,因为它替换了零次,所以它返回假(""),它等效于数字 0。
2014-10-23
电子科技大学 生物信息学中心
17
3. 正则表达式生物信息学应用实例
• SAORUP
– Target-Unrelated Peptides Scanners – 操作系统
• Linux
– 网络服务器
• Apache
– CGI程序编程语言
• Perl、Python
– 调用的软件及专业工具包
$haystack =~ /needle/;
/o
/g /cg
只编译模式一次
全局地查找所有匹配 在 /g 匹配失败后允许继续查找
在标量环境里,成功返回真失败返回假; 在列表环境里使用,返回匹配的子串列表。
2014-10-23
电子科技大学 生物信息学中心
13
模式替换运算符 s///
LVALUE =~ s/PATTERN/REPLACEMENT/egimosx s/PATTERN/REPLACEMENT/egimosx
2014-10-wenku.baidu.com3
电子科技大学 生物信息学中心
11
\r \s \S \t \u \U \w \W \x{abcd} \X \z \Z
回车符 任何空白字符 [ \t\n\r\f] 任何非空白字符 [^ \t\n\r\f] 水平制表符(HT) 把下一个字符变成标题首字符 大写(不是标题首字符)\E 以前的字符 任何字母、数字、下划线 [a-zA-Z0-9_] 何“非字”字符 [^a-zA-Z0-9_] 在十六进制中给出的字符 Unicode里的”组合字符序列“字串 是否在字串结尾 是否在字串结尾或者在可选的换行符之前
9
* + ? {N} {N,} {N,M} *? +? ?? {N,}? {N,M}? \... \0 \NNN \a \A \b
0 或多次 1或多次 0或1 次 N次 N次及N次以上 N到M次(含N及M次) 0或多次(最小) 1或多次(最小) 0或1次(最小) N次及N次以上(最小) N到M次(最小) 转义 空字符(ASCII NUL)。 八进制的字符,最大值为\377 警钟字符(BEL) 是否在字串的开头 退格字符(Backspace)
print "\$1\t$1\n"; print "\$2\t$2\n"; print "\$3\t$3\n"; print "\$4\t$4\n";
2014-10-23
电子科技大学 生物信息学中心
16
转换运算符 tr///
LVALUE =~ tr/SEARCHLIST/REPLACEMENTLIST/cds tr/SEARCHLIST/REPLACEMENTLIST/cds
变量替换 支持* 支持* 不支持 不支持
模式匹配运算符 m//
EXPR =~ m/PATTERN/cgimosx EXPR !~ m/PATTERN/cgimosx
/i /m /s /x 忽略字母大小写 跨行匹配(让 ^ 和 $ 匹配随后嵌入的 \n) 让 . 匹配换行符并且忽略 $* 忽略空白并且允许在模式里的注释
/c /s 与SEARCHLIST为补 消除重复的字符 /d 删除找到的但是没有替换的字符
tr/ATCG/TAGC/;
逐字符地扫描一个字串,然后把每个在 SEARCHLIST (不是正则表达式)里出现 的字符替换成对应的来自 REPLACEMENTLIST(也不是替换字串)的字符; 返回替换或者删除了的字符个数;
• 十二元字符
...|... (...) [...] . ^... ...$
• 例如:PATTERN、Regular Expression
\ | () [ { ^ $ * + ? .
或 分组 匹配一个方括号内任一字符 任一字符 以...开始 以...结尾
2014-10-23
电子科技大学 生物信息学中心
2014-10-23
电子科技大学 生物信息学中心
5
(13)引号样运算符
引号及引号样运算符(Quote and Quote-like Operators)与圆括号、方括号、花 括号一样,具有最高的优先级,在有的情况下,还支持变量替换(variable interpolation)、转义字符(escape character)和模式匹配(pattern matching)。
(2)模式匹配运算
正则表达式本身如同裸字,必须穿上衣服 正则表达式凶猛如同野兽,必须关进笼子
2014-10-23
电子科技大学 生物信息学中心
12
惯用符号 //
通用的自定义形式 m{} s{}{} tr{}{} y{}{}
功能与含义 模式匹配(Pattern match) 替换(Substitution) 字译(Transliteration) 字译(Transliteration)
惯用符号 '' "" `` // 通用的自定义形式 q{} qq{} qx{} qw{} m{} qr{} s{}{} tr{}{} y{}{} <<EOF <<LABEL...LABEL 功能与含义 直接量(Literal) 直接量(Literal) 执行命令(Command) 单词列表(Word list) 模式匹配(Pattern match) 模式(Pattern ) 替换(Substitution) 字译(Transliteration) 字译(Transliteration) 嵌入文档(here-doc) 变量替换 不支持 支持 支持* 不支持 支持* 支持* 支持* 不支持 不支持 支持*
•
•
•
Chapter 3 Overview of Regular Expression Features and Flavors
2014-10-23
电子科技大学 生物信息学中心
7
WPS文字
EditPlus
VIM
2014-10-23
电子科技大学 生物信息学中心
8
2. 正则表达式与模式匹配运算符
(1)正则表达式书写规则与方法 正则表达式就是一种文本、字串的规律或特征的表示方法 – 普通字符自含表达 – 元字符有特殊含义
2014-10-23
电子科技大学 生物信息学中心
4
第二章...常用数组操作函数...
my @aminos = split //, $peptide; #the null pattern //
第三章...范围运算符...
for (0..25){ #number range in list context
2014-10-23
电子科技大学 生物信息学中心
14
• 模式匹配与替换中的特殊变量
– 成功匹配了一个模式(包括替换中的模式)
• 匹配内容会赋给变量$& • 左边内容会赋给变量 $` • 右边内容会赋给变量$'
"hello regular expression" =~ /reg\w+/;
print "Left: print "Match: print "Right: <$`>\n"; <$&>\n"; <$'>\n"; # Left: # Match: # Right: <hello > <regular> < expression>
电子科技大学 生物信息学中心
10
2014-10-23
\b 在字边界 \B 不在字边界 \cX 控制字符 Control-x(\cC 指 Ctrl-C, \cZ 指 Ctrl--Z, \c[ 指 ESC, \c? 表 DEL) \C 一个字节(C字符),甚至在utf8中也如此(危险) \d 任何数字字符 [0-9] \D 任何非数字字符 [^0-9] \e 逃逸字符(ASCII ESC,不是反斜杠) \E 结束大小写(\L,\U)或者掩码(\Q)转换 \f 进页字符(FF) \G 是否在前一个m//g的匹配结尾位置 \l 把下一个字符变成小写 \L 把\E以前的字母都变成小写 \n 换行符 \N{NAME} 命名字符(例如:\N{greek:Sigma}) \p{PROP} 任何有命名属性的字符 \P{PROP} 任何没有命名属性的字符 \Q 消元到\E前面的字符
@allpeps=<INFILE>;
%seen = (); foreach my $line(@allpeps) { next if $seen{$line}++; print OUTFILE $line; } 2014-10-23
电子科技大学 生物信息学中心
2
第五章 Perl正则表达式
1. 正则表达式简介 2. 模式匹配运算符与正则表达式 3. 正则表达式生物信息学应用实例 4. Eclipse+EPIC开发环境中正则表达式插件的使用 5. 课后作业
print $alphabet[$_] if ($alphabet[$_] !~/B|J|O|U|X|Z/);
}
foreach (@lines) { # if ( my $r = $_ =~ /0/ .. $_ =~ /1/)
if ( my $r = /0/ .. /1/) { print "$r\t", "$_\n"; } }
6
2014-10-23
电子科技大学 生物信息学中心
1. 正则表达式简介
• • 萌芽于1940年代早期两位神经生理学家( Warren McCulloch, Walter Pitts)的神经元水平 的神经系统工作模型; 数学家Stephen Kleene将这些模型用他所谓的“ 正则集”(regular sets)代数化;同时提出了 一套表述这些“正则集”的符号方法(notation) ,并将其称为“正则表达式”(regular expressions); 1967年,Ken Thompson在申请了文本匹配算法 专利后,把正则表达式用于开发QED文本编辑 器,后来移植到了unix系统的ed,并从ed的 g/Regular Expression/p命令 (Global Regular Expression Print)衍生为grep,取得了巨大成功! 从1986年起,Perl成为正则表达式发展与推广 的旗手,塑造今天正则表达式的标准和地位, 征服了几乎所有主流语言,成为每个专业开发 者都必须掌握的基本工具! 不同编程语言使用正则表达式手段不同:Java 、.NET、C/C++、Python等通过类库,Perl、 Ruby、JavaScript等内置了正则表达式引擎。
电子科技大学 生物信息学中心
1
巧用Hash编写Uniq
#!/usr/bin/perl
open (INFILE,"$ARGV[0]") || die("Could not open file $ARGV[0]!"); open (OUTFILE,">$ARGV[1]")|| die("Could not write file $ARGV[1]!");
• ProSite • LIBSVM • BLASTP 2.2.24+
目标与要求
• 了解: • 掌握:
– 模式匹配运算符; – 扩展的模式匹配。 – 模式中的特殊字符、转义字符,模式中的变量替换, 字符范围转义前缀,模式定界符; – 模式匹配选项,模式替换、翻译运算符。
– 正则表达式在生物信息学模式匹配问题中的应用实例 – 嵌套匹配,Unicode的模式匹配。
• 难点与重点: