正则表达式的理解

正则表达式的目的就是匹配字符串,匹配字符串可以是我们简单理解的字符串,例如:"zhangsan"

但这不是正则表达式美丽所在,它是通过对其他字符的特殊转义来达到复杂匹配字串的支持。这里介绍一下它所支持的基本转义符

1 基本正则式

1.1) ^   表示文本行的开头

eg: "^a"  表示匹配行的第一个字符为"a"的意思

1.2) $   表示文本行的结尾

eg: "$a"  表示匹配行的结尾前面的一个字符为"a"的意思

1.3) *   表示任意个字符

eg:  "^aa*bb$"  表示对存在"aa"开头,"bb"结尾,中间存在任意个字符的文本行进行匹配

1.4) [ ]  这对中括号,主要是提供一种在某一位字符存在多个情况选择的机制

eg:  "[bB]ob"  表示匹配存在bob 或者是Bob的字符串

1.5) .    表示任意一个字符,有别与"*",简单点理解就是一个占位符,对于这一个字符上面是什么样的字符没有要求

eg:  "aa.bb"   表示由"aa"和"bb",以及在这两个字串之间任意一个的字符组成的字符串。

执行演示:

$: echo "aacbb" | grep "aa.bb"

aacbb

$: echo "aabb" | grep "aa.bb"

$:

2 扩展正则式

扩展的正则表达式和基本的区别在与增加了某些元字符

在grep默认情况下支持基本正则表达式,你可以添加"-E"选项,让其支持对扩展的正则式的支持,当然你也可以使用egrep程序来实现。

2.1) |  表示选择,和基本正则当中"[" ,"]"的目的相同,只不过这个支持的不仅仅是单个字符,可以是字串,而"[]"则只能支持单个字符。

eg:

$: echo "aaa" | grep -E "aaa|bbb"

aaa

$: echo "bbb" | grep -E "aaa|bbb"

bbb

$: echo "ccc" | grep -E "aaa|bbb"

$:

2.2) ()  用于将正则式的基本元素结合起来,

针对上面现在要求开头为aaa或者bbb的匹配,echo "aaa" | grep -E "^(aaa|bbb)",如果用echo "aaa" | grep -E "^aaa|bbb"就会出现错误

例如:

$: echo "acbbb" | grep -E "^aaa|bbb"

acbbb

$:

结果不是我们要求的,

3.3){}  ?  +  *  这四个主要提供一种对匹配数目要求的支持,在这之前我们没有什么方法去支持对匹配数量的要求,例如查找"goooooogle",你可以把正则式写成"goooooogle",但是这个太麻烦,也没有拓展性。

? 表示在?之前的这个字符存在一个或者零个,简言之,就是在?之前的这个字符是可有可无的。

eg:

$: echo "abbb" | grep -E "a?bbb"

abbb

$: echo "bbb" | grep -E "a?bbb"

bbb

$:

* 表示前面的字符可以不出现或者一次及以上次数,

例如:

$: echo "abbb" | grep -E "a*bbb"

abbb

$: echo "bbb" | grep -E "a*bbb"

bbb

$: echo "aaaaabbb" | grep -E "a*bbb"

aaaaabbb

$:

+ 表示前面的字符可以出现1次或者连续的多次以上,可以与*进行比较, * 可以理解为>=0 ,而+ 可以理解为>=1;

例如:

$: echo "abbb" | grep -E "a+bbb"

abbb

$: echo "bbb" | grep -E "a+bbb"

$: echo "aaaaaaabbb" | grep -E "a+bbb"

aaaaaaabbb

$:

{m,n}表示前面的字符至少得连续m次,最多为n次,

{m}表示前面的字符得连续m次

{m,}表示前面的字符至少连续m次,或者更多

{,n} 表示前面的字符不能连续的超过n次

例如:d对{,n}这种格式下进行测试:

$: echo "aaaaaaabbb" | grep -E "^a{,4}bbb"

$: echo "aaabbb" | grep -E "^a{,4}bbb"

aaabbb

$: echo "aabbb" | grep -E "^a{,4}bbb"

aabbb

$: echo "abbb" | grep -E "^a{,4}bbb"

abbb

$: echo "bbb" | grep -E "^a{,4}bbb"

bbb

$:

注意这里的{}  *,在书写的时候得在""里面,不然shell可能进行括号的扩展,导致结果不是正常想要的。

时间: 2024-10-29 01:35:15

正则表达式的理解的相关文章

BGP中正则表达式的理解

今天不经意和网上一个朋友聊到H3CTE 考试,不过很遗憾的上我考挂了,所以才和他讨论的,当时讨论BGP 的路由属性控制MED 和LOCAL-PECR ,突然帽出来个正则表达式,很郁闷的是,我一直都没怎么在乎这个东西,以前只是看到过,以为不怎么重要,今天他突然和我讲了下重要性,而且当时考H3CTE 就需要用上这个,汗~~~居然都不知道.和他聊完我立即找这相关方面的资料,找到了一点点,郁闷很难看懂啊,都是一些符号不好理解啊.没法呀,得学习^_^ 下面是对BGP 正则表达式的介绍 . 匹配任意单个字符

grep、正则表达式和扩展正则表达式的理解及运用

grep.正则表达式和扩展正则表达式的理解及运用 一 .grep的基本含义 我们可以从命令man grep中看到gerp命令的帮助文档,从中我们可以得出grep.egrep.fgrep都是文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的. grep有三种变形:   grep:标准grep命令,支持基本正则表达式   egrep:扩展grep命令,支持基本及扩展的正则表达式   fgrep:fastgrep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅

grep之正则表达式的理解及应用

正则表达式在本周学习中是个难点和重点,其中难免会有很多坑,也难免会不停的往里跳,当跳的比较多了也就长记性了,通过很多次练习慢慢也就能发现其中暗藏玄机,成功的避开大坑选择往小坑里跳了,我相信在以后的学习中会不断进步.勤加练习终究会跳出来的.好了,以下是本人对正则表达式的一点理解,如有错误之处请联系我,会修改和学习的. 一.正则表达式之grep.  正则表达式是一种符号表示法,用于识别文本模式.Linux处理正则表达式的主要程序是grep.grep搜索与正则表达式匹配的行,并将结果输送至标准输出.

对于正则表达式的理解

1.一个正则表达式代表了某类字符串的一个集合,而正则表达式相当于对该字符串集合的特征性质描述. 2.我觉得它就是一个特定的规则,这些"特定的规则",从被匹配的字符串的角度上来看,可以认为描述的是某一类字符串的共同特征:而从正则表达式的角度上来看,也可以认为表达的是一种匹配规则(或称过滤逻辑). 3.,正则表达式是一种特殊的字符串(即正则表达式字符串,往往直接简称为正则表达式或正则式),用来描述.匹配.过滤符合某些特征的其它字符串(即输入字符串.源字符串.被测试的字符串.被匹配的字符串,

正则表达式学习理解

何为正则表达式? 首先,我们先来回答一个问题,就是如何向一个人介绍什么是邮箱?(单纯的回答) 我们可能会这样说,只要满足:首先是一串英文,数字,下划线.然后是@符号,在然后是一串英文,数字,其次是  .   最后是一串因为.

正则表达式和理解

正则表达式: 正则表达式:由元字符和正常字符组合而成 文本处理工具:grep,egrep,sed,awk,vim,nginx grep:全局搜索正则表达式,搜索结果那一行显示出来 文本搜索工具:根据用户条件,用元字符和正常字符对目标文件进行逐行搜索,搜索结果显示出来 grep [options], PATTERN [FILE...] --color[=when],--colour[=when] 对搜索出来的结果进行颜色显示 auto always never -o:只显示被模式匹配到内容 -i:

正则表达式符号理解

正则表达式元字符表 元字符 描述 \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,“\\n”匹配\n.“\n”匹配换行符.序列“\\”匹配“\”而“\(”则匹配“(”.即相当于多种编程语言中都有的“转义字符”的概念. ^ 匹配输入字符串的开始位置.如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置. $ 匹配输入字符串的结束位置.如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置. * 匹配前面的子表达

正则表达式基础、原理及优化

前言 正则表达式使用单个字符串来描述.匹配一系列匹配某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些匹配某个模式的文本.简单说就是一个特殊的字符串去匹配一个字符串.定义了一些规则,用于匹配满足这些规则的字符串. 对于正则表达式应该很多人第一感觉就是很难,完全没有规律,看不懂. 我觉得可能有以下几个原因: 1.读不懂. 各种不同的字符组合一起,难以理解.确实,对于熟悉正则表达式的人来说,一个稍微长点的正则表达式想要理解起来,可能也要花费一定的功夫.可读性差是正则表达式的

node.js学习笔记之正则表达式

每种编程语言里都有正则表达式,而且内容基本上都是一样的,今天就来说说我对正则表达式的理解. 我觉得正则表达式实际上就是一种规则,一种针对字符串的规则,我们可以通过正则表达式来获取我们想要的同类型字符串或者检验某一字符串是否符合我们的要求. 正则表达式可以参与计算的符号有: (),小括号,或叫圆括号,是一个分组,也是个集合.他的作用是一个匹配一串字符.比如: /(abc)/;   该句的作用是匹配源字符串中是否有"abc"这样的一串字符; [],中括号,或叫方括号,是一个集合,他的作用是