正则表达式的学习心得

1.  基本正则表达式支持的元字符

元字符 描述 用法举例
. 匹配任意一个字符。 a., x.y, x.., .ab.
[] 匹配指定范围内的任意字符。 [abc], [0-9], [a-z], [A-Z], [[:alpha:]], [[digit:]],
[[:alnum:]], [[space:]], [[:upper:]], [[:lower:]], [[:punct:]]
[^] 匹配指定范围以外的任意字符,即‘[]’的取反。 [^0-9], [^[:space:]], [^[:punct:]]
* 对其前的字符匹配任意次。 ab*, .*, *ab, xy*z, [[:space:]]*ab,
xy[^[:punct:]]*
? 对其前的字符匹配0次或1次。使用时要用转义符,即’\?’ ab?, [[:space:]]?ab, xy[^[:punct:]]?
{} 对其前的字符匹配指定区间次。使用时要用转义符,即’\{\}’ ab\{3\}, ab\{1,\}, ab\{0,3\}, ab\{1,5\}
() 分组符。使用时要用转义符,即’\(\)’ ab\(xyz\)*, \(abc\)like\(xyz\)
\num 分组引用。严格意义上并非元字符,而是一种特定的转义。要和分组符联合使用才有意义。 he \(love\)s his \1r
^ 行首锚定符 ^#.*,  ^Root
$ 行尾锚定符 china$,  ^$
< 词首锚定符。使用时要用转义符,即’\<’ \<[[:digit:]],  \<Root
> 词尾锚定符。使用时要用转义符,即’\>’ \<root\>,  
\<[[:alnum:]]*\>

2.  扩展正则表达式增加的元字符

元字符 描述 用法举例
+ 对其前的字符匹配至少1次。 ab+,  ^#[[:space:]]+[^[:space:]]+
| 组内多选一符。 the selection is (yes|no),  user name is
(root|hadoop|redhat|centos)

注:
在扩展正则表达式模式下,除了词首锚定符’<’和词尾锚定符’>’使用时要进行转义外,其它元字符都不需要做转义!

3.  grep和egrep命令常用的选项

-v     取反显示,即显示表达式不匹配的行。

-o    仅显示被匹配到的文本内容,而非整行的内容。

-i     匹配时不区分字符大小写。

-E    使用扩展的正则表达式模式。

-A num    同时显示匹配到的行的下面num行

-B num    同时显示匹配到的行的上面num行

-C num    同时显示匹配到的行的上面和下面各num行

--color=auto    对匹配到的文本内容用相应字体颜色显示。

-q        静默模式,即不输出任何内容,只关心匹配的执行结果,适合在shell脚本中使用。

-e expr       有多个正则表达式条件时,每个表达式前需用 -e
进行联合多个表达式条件。默认只有一个表达式条件时,-e 可以省略。

4.  正则表达式中关于引用的对应关系

正则表达式中使用’\1’,’\2’,’\3’…
引用前面对应的括号中的内容,遵循的原则是:左括号从左到右出现的次序。’\1’引用的内容是从左边开始,第1个左括号开始到其对应的右括号内内容;’\2’引用的内容是从左边开始,第2个左括号开始到其对应的右括号内内容;’\3’引用的内容是从左边开始,第3个左括号开始到其对应的右括号内内容;以此类推。因此,从括号的层次角度,是先引用外层括号内的内容,再引用内层括号内的内容。例:

info.text:

1 xyxyabababxyab

2 xyabxyab

3 xyabxyabxyab

4 xyxyxy

5 xyxyabababxyabxyxyababab

6 xyxyabababxyabxyxyabababxyabxyab

[[email protected] test]$ egrep --color=auto "((xy){2}(ab){3})(\2\3)*\1\4{2}"
info.text

6 xyxyabababxyabxyxyabababxyabxyab

5.  在 [[ ]] 中支持的字符串模式匹配操作符’=~’

  • 不需要对模式匹配操作符右边的正则表达式加引号。
  • 支持的正则表达式是扩展的正则表达式模式。即对所有元字符都不需要进行转义。
  • 不支持词首锚定符’<’和词尾锚定符’>’。

lineStr=19934567

if [[ "$lineStr" =~ ([1-9][0-9]+|1[0-9][0-9]) ]] ; then
    echo
"$lineStr"
fi

时间: 2024-10-05 23:25:11

正则表达式的学习心得的相关文章

jquery validate学习心得

据说,javascript最初的由来就是为了解决表单的验证问题,当然现在的js已经能够用来做各种各样炫酷的效果,不过表单验证一直以来都是js很重要的一个用途(在博客园第一篇博客,不知道说些什么开头~~). 最近刚刚接触到了一个简答易用的表单验证插件jquery validation,下面来分享下这几天收集到的一些资料与学习心得. 一个优秀的表单验证插件:      作为受众多web开发者追捧的validation,它理应拥有如下各种优点: 1.内置验证规则:拥有必填,url,数字,email等1

windows类书的学习心得(转载)

原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千,很多陌生的出版社,很多陌生的作者,很多陌生的译者,书名也是越来越夸张,什么××天精通××,精通××编程, ××宝典等等,书的印刷质量真的很好,纸张的质量也是今非昔比啊,但书的内容好象却是越来越让人失望,也许是我老了,我的思想我的观念已脱离现实社会,也许是外面的世界变化得太快,我编程数月,出去一走,

我的MYSQL学习心得(五)

我的MYSQL学习心得(五) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) MYSQL中的运算符很多,这一节主要讲MYSQL中有的,而SQLSERVER没有的运算符 安全等于运算符(<=>) 这个操作符和=操作符执行相同的比较操作,不过<=>可以用来判断NULL值. 在两个操作数均为NULL时,其返回值为1而不为NULL: 而当一个操作数为NULL时,其返回值为0而不为NULL. 下面分别是 SELECT N

我的MYSQL学习心得(七)

我的MYSQL学习心得(七) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 在这个<我的MYSQL学习心得>系列里面,我一直都把MYSQL跟SQLSERVER进行比较,相互进行比较是学习一样东西比较好的方法 比较出大家的异同点,从而加深记忆 这一篇<我的MYSQL学习心得(七)>也是一样,相同的地方略略带过,不同的地方我会给出例子,谢谢大家的支持o(

我的MYSQL学习心得(七) 查询

在这个<我的MYSQL学习心得>系列里面,我一直都把MYSQL跟SQLSERVER进行比较,相互进行比较是学习一样东西比较好的方法 比较出大家的异同点,从而加深记忆 这一篇<我的MYSQL学习心得(七)>也是一样,相同的地方略略带过,不同的地方我会给出例子,谢谢大家的支持o(∩_∩)o 这一节主要介绍MYSQL里的基本查询(MYSQL官方参考手册) MySQL中select的基本语法形式: select 属性列表 from 表名和视图列表 [where 条件表达式] [group

web.py学习心得

1.注意判断数字时,如果是get传递的参数,一定要用int转换.不然出错. 2.$var 定义时,冒号后的内容不是python内容,需加上$符号.如$var naviId:$naviId. 3.各个模板中的变量,要对应一致.在用base布局时,整个模板内容为layout模板的content,模板内定义的变量x(模板变量),在layout模板内用content.x 引用. ----------------------------------  网络上搜索的其他faq  --------------

Linux系统理解以及Linux系统学习心得

原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 说一下我对Linux系统的理解 1.加载Linux内核准备:在加载基本输入输出模块(BIOS)之后,从磁盘的引导扇区读入操作系统的代码文件块到内存中,之后开始整个系统的初始化. 2.main.c的start_kernel函数是整个操作系统的入口,这也与Linux是基于C语言的特性相符,start_kernel具体做的动作很多

我的MYSQL学习心得(八)

我的MYSQL学习心得(八) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 这一篇<我的MYSQL学习心得(七)>将会讲解MYSQL的插入.更新和删除语句 同样的,只会讲解跟SQLSERVER不同的地方 插入 将多行查询结果插入到表中 语法 INSERT INTO table_name1(column_list1) SELECT (

我的MYSQL学习心得(一)

我的MYSQL学习心得(一) 使用MYSQL有一段时间了,由于公司使用SQLSERVER和MYSQL,而且服务器数量和数据库数量都比较多 管理起来比较吃力,在学习MYSQL期间我一直跟SQLSERVER进行对比 第一期主要是学习MYSQL的基本语法,陆续还有第二.第三.第四期,大家敬请期待o(∩_∩)o 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DEFAULT关键字后面是不用加括号的 --sqlserver CREATE TABLE emp ( id INT DEFA