• 正则表达式基础

^

行首标志
$ 行末标志

如^cat即一整行只有cat这个单词,^则是一个空行

[  ] 字符组,用来匹配若干字符之一

如gr[ae]y,即grey或者gray

- 在字符组内部,字符组元字符'-'(连字符)表示一个范围(前提是不在字符组开头)

如<H[123456]>和<H[1-6]>是一样的。而[0-9] [a-z] [A-Z]分别用于匹配所有数字、小写字母和大写字母,还可以写成多重范围[]0-9a-zA-Z]

注意,只有在字符组中,'-'才是元字符,其他情况只是一个普通符号

^ 排除型字符组,会匹配任何未列出的字符

如[^1-6]匹配除了1,2,3,4,5,6以外的任意字符

用q[^u]来匹配单词,能匹配出qoph,但是不能匹配出Iraq。因为排除型字符组是匹配一个除列出字符以外的字符,也就是它必须匹配一个字符,这个和不匹配字符是有区别的。

. 匹配任意字符

元字符'.'用来匹配任意字符,也就是说所有字符都可以用.来匹配。但是注意,在字符组中,.只是一个普通字符,只用来匹配点号

如,匹配03/19/76 、03-19-76或者03.19.76,我们可以用03[-./]19[-./]76,或者03.19.76。

但是注意,03.19.76同样可以匹配03319 76这样的字符串,因为点号可以匹配任意字符。所以用03[-./]19[-./]76会更加准确,但是也更加难读,难写

(   |   ) 多选结构,元字符'|'表示'或'

依靠它,我们可以把不同的子表达式组合成一个总的表达式,而这个总表达式又可以匹配任意子表达式。这就是多选分支,它和字符组不同,字符组匹配的是一个字符,而多选分支匹配的是多个子表达式中的一个

如,Bob和Robert是两个表达式,但是用Bob|Robert就可以同时匹配这两个表达式。前面的gr[ae]y可以写成gr(a|e)y。

再如,^From|Subject|Data:和^(From|Subject|Data):是不同的

\b 单词分界符,元字符'\b'由两个字符组成,\和b,作用是分隔单词

\b和^、一样,都是对位置的锚定,而不是匹配一个真正的字符。在一个单词的前后加上\b,可以准确的匹配到该单词
如果想要匹配cat,只是用cat匹配,有可能会匹配到stdcatup中的cat,但是如果用\bcat\b来匹配,结果肯定是cat
对于单词分界符,不同流派的正则表达式有不同的符号,这里提到的是perl

? 可选项元素,元字符'?'代表可选项,即是说?前面的一个字符是可有可无的

用colou?r可以匹配color和colour
再如匹配表示7月4号(July fourth)的文本,其中月份可能写作July或者Jul,而日期可能写作fourth、4th、4,可以用July?(fourth|4(th)?)来匹配。

+ 之前紧邻的元素出现一次或者多次
* 之前紧邻的元素出现任意多次,或者不出现
? 之前紧邻的元素出现一次或者不出现

在使用时,经常把+号或者*号作用于空格,来消除空格的影响。如,如果你确定有至少一个空格,就可以用 +来匹配,如果不确定空格的数量,甚至可能没有,就用 *来匹配

{min,max} 限定重现次数

某些支持正则表达式的语言支持另外一种很方便的限定一个字符或者一个子表达式重复出现的次数,如[]a-zA-Z]{1,5}来匹配美国的股票代码(1到5个字母)
?其实和{0,1}起到同样的作用

(   ) 括号的捕获功能

括号有两种用途①限制多选项的范围,以及将若干字符组合为一个子表达式,受问号或星号之类的量词作用;②记忆它们包含的子表达式匹配到的文本

在perl中,括号会把匹配到的文本记录在1、2、3……等以数字名为变量名的变量当中。

在一个正则表达式中如果使用了多个括号,那么变量按顺序对应相应的括号,括号是按开括号'('从左到右的出现顺序进行的。

例如([0-9])([a-z]),1就是储存[0-9]匹配到的内容,2就储存[a-z]匹配到的内容

\ 转义符'\'作用就是使跟在它后面的元字符失去意义,变成普通字符,不过在字符组内转义符无效

如,要匹配(very),就用\([a-z]+\)来匹配,这样,就是匹配一个开括号,然后跟着至少一个英文小写字母,在跟着一个闭括号。

  • perl的简单入门

perl用起来很方便,可以把所有单个变量都存储在一种标量变量中,标量变量以$加上变量名表示perl也支持各种数学运算符号
和其他语言一样,支持各种循环结构(while,for),条件语句(if else)

 ;
 )
 {
 )
 {/)+;}
 Print "$Celsius C is $Fahrenheit F.\n"
 ;
 }
  • 用正则表达式匹配文本

perl中最简单的使用正则表达式的方式就是匹配某个文本
用=~m//这个表达式来匹配
m是match这个命令,/....../两个斜杠中间是正则表达式,=~用来连接m/....../和欲搜索的字符串

 print  "Enter a temperature in Celsius:\n";
 $ceisius=<STDIN>;
 chomp($celsius);#去掉celsius末尾的换行符
 -]+$/);
 {
 /)+;
 print "$celsius C is $fahrenheit F.\n"
 }else {print "Expecting a number."}

如果要转换华氏度和摄氏度,我们应该更加合理的处理用户的输入。例如需要有正负号、小数点、单位等等。

 print "Enter a temperature in Celsius: \n";
 $input=<STDIN>;
 chomp($input);
 -]+(\.[-]*)?)([CF])$/)
 {
 ;
 ;
 if($type=~m/c/)
 {
 $celsius=$inputnum;
 /)+;
 }
 else{
 $fahrenheit=$inputnum;
 )*/;
 }
 print "$celsius C is $fahrenheit F. \n"
 }else {print "Expecting a number."}
(?:......) 非捕获型括号,只分组,不捕获,不会对捕获括号的顺序产生影响

我们用(\.[0-9]*)?来正确分组,这样我们就能使问号正确的作用于整个(\.[0-9]*,可是这样括号中的内容就会被捕获而且放到$2中,可是我们不会使用2
  -]+(?:\.[-]*)?)([CF])$/#即使[CF]的括号排在第三位,但它匹配的文本还是会存放在$2当中

  • perl的正则表达式注意事项
=~m/....../i 使正则表达式忽略大小写来匹配
\t 制表符
\n 换行符
\r 回车符
\s 任何空白字符
\S 除\s之外的任何字符
\w [a-zA-Z0-9]
\W 除\w之外的任何字符
\d [0-9]
\D 除\d之外的任何字符

用\s匹配所有空白,表示空白的符号很多,有空格,制表,换行,回车,退格等等。\s可以用来匹配所有的空格符,以后要匹配空格的时候可以使用\s*

  • 温度转换程序最终版本
 print "Enter a temperature in Celsius:\n";
 $input=<STDIN>;
 chomp($input);
 -]+(?:\.[-]*)?)\s*([CF])$/i)
 {
 ;
 ;
 if($type=~m/c/)
 {
 $celsius=$inputnum;
 /)+;
 }
 else{
 $fahrenheit=$inputnum;
 )*/;
 }
 print "$celsius C is $fahrenheit F.\n"
 }else {print "Expecting a number."}

perl正则表达式第一周笔记的更多相关文章

  1. perl正则表达式第二周笔记

    1.使用正则表达式修改文本 1.使用正则表达式修改文本 正则表达式的功能不只有查询,还可以对文本进行修改,例如替换 $var=~m/regex/i $var=~s/regex/replacement/ ...

  2. 《Linux内核分析》第一周笔记 计算机是如何工作的

    一.计算机是如何工作的? 1.存储程序计算机工作模型 1)冯诺依曼体系结构 学习研究计算机的基本概念.就是指存储程序计算机.所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系 ...

  3. STL与泛型编程-第一周笔记-Geekband

    1, 模板观念与函数模板 简单模板: template< typename T > T Function( T a, T b) {- } 类模板: template struct Obje ...

  4. JS第一周学习笔记整理

    目录 JS正式课第一周笔记整理 JS正式课第一周笔记整理 webstorm : 代码编辑器 浏览器: 代码解析器: Git : 是一个工具;用于团队协作开发项目管理代码的工具:在工作中用git.svn ...

  5. 第一周 总结笔记 / 斯坦福-Machine Learning-Andrew Ng

    课程主页:https://www.coursera.org/learn/machine-learning/home/welcome 收集再多的资料也没用,关键是要自己理解总结,做笔记就是一个归纳总结的 ...

  6. 《Machine Learning》系列学习笔记之第一周

    <Machine Learning>系列学习笔记 第一周 第一部分 Introduction The definition of machine learning (1)older, in ...

  7. 20165326 java第一周学习笔记

    第一周学习笔记 一.理论视频学习 1.Java的特点:简单.面向对象.平台无关 2.Java的开发步骤&简单的应用程序: 文本编辑器写入代码 命名类名.java,文件类型所有文件,编码ANSI ...

  8. 《Linux内核分析》第一周学习笔记

    <Linux内核分析>第一周学习笔记 计算机是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...

  9. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

随机推荐

  1. 【SDK编程】

    #include <stdio.h> #include <windows.h> int main() { DeleteFile("C:\\test.txt" ...

  2. FormData实现文件上传实例

    单提交,文件上传是一个常用又十分麻烦的功能,以前要上传文件通常都是借助插件或者flash来实现,噼里啪啦的加载一大堆东西.自从有了HTML5的FormData后,老板再也不用担心我的上传了. Form ...

  3. chrome浏览器的桌面通知

    最近在使用朋友网(不加链接,避免有打广告的嫌疑),发现会出现提示“是否允许网站显示桌面通知?”,如下图所示: 这种做法,在页面加载完时直接调用请求,比起开心网的这种提示感觉有些野蛮了.开心网的桌面通知 ...

  4. Nullable<T> 与 T?

    Nullable<T> : 基础类型为值类型的对象,值类型的对象和引用类型的对象一样也可以分配 null.可空类型. Nullable<int> 与 int?是同样的意思. ; ...

  5. java synchronized使用

    java synchronized 基本上,所有并发的模式在解决线程冲突问题的时候,都是采用序列化共享资源的方案.这意味着在给定时刻只允许一个任务访问该资源.这个一般通过在代码上加一条锁语句实现,因为 ...

  6. linux 下idea 启动tomcat报JMX 1099错误解决办法

    开始使用linux开发环境,在配置idea 下tomcat 启动时报错,提示错误为unable to ping server at localhost:1099. 解决办法: 修改/etc/hosts ...

  7. html5 Canvas处理图像 实例讲解

    最近在学习canvas,canvas有很强大的图像处理功能,下面写一个我的学习总结: canvas常用功能: 1. 绘制矩形.圆形.曲线.组合图形 2. 绘制文本 3.绘制渐变.变形的图形 4. 图片 ...

  8. Android_自定义进度条

    转载:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重复造轮子的 ...

  9. CSS自学笔记(9):CSS拓展(二)

    CSS图片 当一个网页上有一张或多张图片,而且这些图片的尺寸比较大时,为了是网页布局更紧凑合理,我们可以将这些图片放到一个图片库里,可以有效的防止图片过大可能会对网页布局造成的不良影响. 通过CSS我 ...

  10. 【Chromium中文文档】OS X 沙箱设计

    OS X 沙箱设计 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/OSX ...