闲聊正则表达式

  这篇是跟大家没事聊聊正则表达式而已,可不要拿这个当学习教材啊!——如果看着舒服,那么给Me推荐一下。

正则是什么玩意?

  其实这个东西就是一个文本处理工具。记住只是一个“工具”而已,不要想的太复杂。

  对于这玩意,能用就用,不能用,咱们就不用他,换个称手的家伙。跟杀人一个道理,如果觉得枪不好用,那你就用锄头,或者刀子。

正则从哪入手?

  如果你想了解一个人身体结构,很简单:拿刀子把身体解剖开,就知道里面都有什么了?无怪乎肉、骨头,还有水。

  现在我们把正则剖开来看,发现也就是“元字符”和“普通文本字符”组成了正则。怎么玩好正则?就看你怎么拼装这些字符了。

注意了,既然正则是由字符构成,那我们就要养成用字符理解正则的习惯。

举个例子:

  你是怎么理解^chuanshanjia的?

  我想你肯是这样理解的:匹配以chuanshanjia开头的行。——这么组织语言,让脑袋转了几下,费脑子。

  而字符理解是:先匹配一个行开头^,紧接着是c、h、u、a、n、s、h、a、n、j、i、a字符的行。——脑子不用转,挨着往下看就行了。

行的起始和结束

  上面我举了个^chuanshanjia的例子,里面的^这个就表示行的起始。

  现在具体来说说:

  ^(脱字符号),代表一行的行首。记住这个符号代表的是行文本中的一个位置。——只是位置而已。

  用“脱”这个字?搞不明白,难道在一个字符的前面放这么一个符号,就表示后面的字符要脱什么东西了?——你可以这么理解,做那事的时候,首先得把衣服脱了,要不然,你们怎么开始?^_^

  $(美元符号),代表一行的行尾。理解了^,这个自然好理解了。也仅仅表示文本行的位置。——干完事记着付钱啊,而且要给美元($)!^_^

注意了:脱字符和美元符,它们匹配的是一个位置,而不是什么具体的文本字符。

字符组

  现在幻想一下:如果你是选美比赛的评委,现在有美女,编号是:A、B、C、D、E、F......。你看上了其中几个美女,想潜规则她们,那么你就会拿出一张小纸条,上面写上A、E、C。然后让手底下的人,去把这几个美女带上来。然后后面的事你就想吧......

字符组就相当于你拿出的那张小纸条。它的功能就是把你想要的字符放到里面。我们把这个小纸条用“【】”表示。

现在给你写个例子:

  我准备了一张美女名单表(meinv.txt):

美女如下:
    number:A 身高:170cm 年龄:20
    number:B 身高:180cm 年龄:22
    number:C 身高:172cm 年龄:23
    number:D 身高:179cm 年龄:18
    number:E 身高:171cm 年龄:30
    number:F 身高:173cm 年龄:23
    number:G 身高:190cm 年龄:22 

看好了,我要潜规则了!暂且让egrep当你的手下吧。

[email protected]:~/workspace/shell$ egrep ‘number:[AEC]‘ meinv.txt
    number:A 身高:170cm 年龄:20
    number:C 身高:172cm 年龄:23
    number:E 身高:171cm 年龄:30

是不是得到了你想要的美女了?只要把美女的编号写到小纸条(【】)里,egrep就把你要的美女给你送上来了。

字符组的元字符

  现在幻想一下,你是个极其懒惰的家伙。 你不想亲自去挑你想要的美女?你只想把比赛的前四名潜规则了。而现在很走运,其中编号是B、C、D、E四个美女获得了前四名。现在你又把你的小纸条拿出来了,直接在上面写个范围,你的手下(egrep)就把这几个美女给你送上来了。

[email protected]:~/workspace/shell$ egrep ‘number:[B-E]‘ meinv.txt
    number:B 身高:180cm 年龄:22
    number:C 身高:172cm 年龄:23
    number:D 身高:179cm 年龄:18
    number:E 身高:171cm 年龄:30

看到没有,这里的“-”(连字符),就表示B到E之间所有字符。它表示一个范围。它跟[BCDE]是一样的。

以下是常用的:

 表示数字范围的[0-9];

 表示字母范围的[a-zA-Z]。

总结

由于篇幅所限,暂时写到此处。若有不当之处,望请指教。

时间: 2024-11-08 10:38:38

闲聊正则表达式的相关文章

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

正则表达式中的逆向思维

人们的正常思维都是顺向的,那么逆向思维呢,特别是初学正则表达式的同学们,好不容易掌握了正则表达式的用法,再突然要你用逆向思维做题,会有很多不适应: 这里拿三道题,来做简单介绍: 1.经典例题取IP: [[email protected] ~]# ifconfig eth0|sed -nr '2s#^[^0-9]+(.*)[a-Z]{5,}.*#\1#gp' 10.0.0.200 2.调换/etc/passwd中最后一列和第一列的位置: [[email protected] ~]# head /p

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

前端学PHP之正则表达式函数

前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正则表达式函数 匹配与查找 [preg_match()] preg_match()函数用来执行一个正则表达式匹配,搜索subject与pattern给定的正则表达式的一个匹配.返回pattern的匹配次数.它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索.preg

正则表达式

grep命令和正则表达式 一. 正则 : 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"):2. 可以通过正则表达式,从字符串中获取我们想要的特定部分. 正则表达式和通配符一样,也是一组特殊符号,通配符是由sh

java中的正则表达式

正则表达式 : 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 一些字符所代表的意思: \        将下一字符标记为特殊字符.文本.反向引用或八进制转义符^       匹配输入字符串开始的位置$       匹配输入字符串结尾的位置.        匹配任何单个字符\s      空白(空格符.换行符.回车符.制表符)\S     非空白[]  

Python 正则表达式相关问题

这几天学习python,写正则表达式相关代码如下: import re print(re.search(r'(?<=<(\w+)>).*(?=<\/\1>)',"<b>ewuiiriur</b>sdksfkj").span()) 报错如下: raise error("look-behind requires fixed-width pattern")sre_constants.error: look-behind

7.python之正则表达式re模块

一.re模块的常用方法: re.findall() 用于返回一个字符串中,所有能被正则表达式所匹配到的字符串,以列表的方式返回. 用法re.findall(正则表达式,字符串). s1 = "sadjhjafdsajkhjsdaysadsadduayu" 比如说,想要从上面这一长串字符串中,匹配出a后面有一个任一字符在紧接着一个字母u的字符串. print re.findall('a.u',s1) >>>['ayu'] re.finditer()作用和findall一

JS中有关正则表达式的一些常见应用

总所周知,正则表达式主要用于字符串处理.表单验证等,简单的代码量实现复杂的功能 1.身份证号码的一个校验 先做一个简单的位数校验来判断身份证的合法性:(15位数字或18位数字或17位数字加X|x) var reg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(^\d|X|x)$)/ if(reg.test(num) === false){ alert("你输入的身份证不合法"); return false; } 18位=前六位地区+中八位出生日期+后4位顺序号(最后一