初学正则表达式

什么是正则表达式:

正则表达式是完成数据的过滤,将不满足正则表达式定义的数据拒绝掉,剩下与正则表达式匹配的数据。

正则表达式的元字符(Metacharacters):元字符是用来阐释字符表达式意义的字符,就是用来描述字符的所要表达的意思。

正则表达式的元字符又分基本正则表达式元字符和扩展表达式元字符。

基本表达式元字符:

字符匹配元字符:

.: 匹配任意单个字符。相当于shell文件名通配符?号

例:r..t  root rabt r和t之间任意2个字符都可以

[ ]: 匹配指定范围内的任意单个字符。

例:1[23]3

123 133  []内面2和3都可以匹配

[^]:取反

例:1[23]3

143 153  不是[]内面的2和3其他的都可以

次数匹配元字符:

*: 任意长度,它前面的字符可以出现任意次。与shell文件名通配符*表示任意长度的              任意字符

例:a*b

aaab b *号a可以出现任意次数包括0次

\?: 0次或1次,它前面的字符是可有可无的

例:a\?b

ab b  \是转义符合,\?前面a最多出现一次,也可以没有

\+: 1次或多次

例:a\+b

ab aab 此处a必须出现1次,最多不限

\{m\}: m次,它前的字符要出现m次

例:1\{2\}3

113  1要出现2次

\{m,n\}: 至少m次,至多n次

例:1\{2,5\}3

113,1113,11113 此处的1最少出现2次,最多出现5次

\{m,\}:至少m次

例:1\(2,\)3

113,111113 此处1最少2次,无上限

\{0,n\}: 至多n次

例: 1\(0,3\)3

3,1113, 此处的1最少0次,但最多3次

位置锚定:

^: 行首锚定;

例:^A

Avbff 大A必须出现在的行首

$: 行尾锚定:

例:A$

abcsA  大A必须出现在行尾

^$: 空白行

^空白字符为行首也$空白字符为行尾,即表示空白

单词:不包含特殊字符的连续字符组成的串

\<: 词首,出现于单词左侧,

例:\<root

roottt root必须出现在单词的左边,能匹配到roottt,不能匹配rrroot

\>: 词尾,出现于单词右侧,

例:root\>

rrroot root必须出现在单词的右边,能匹配rrroot,不能匹配roottt

\b:同\<,\>写在单词前面匹配词首,写在单词后面匹配词尾

例:\broot

roottt root必须出现在单词的左边,能匹配roottt,不能匹配rrroot

例: root\b

rrroot  root必须出现在单词的右边,能匹配rrroot,不能匹配roott

\<char\> : 精确锚定单词

例:\<root\>

root     root出现单词的前面也出现单词的后面,即是准确瞄定位置

分组:

\(\):分组

例:\(12\)1

121   12必须同时出现

\n:引用
                例:\(12\)3\1

12312  \1意思是把\(12\)匹配模式内容在\1位置打印出来

注:分组的括号可以嵌套使用如 \(12\(23\)\),而需引用位置为从第一个左括                     号开始为\1,第二左括号为\2 ,以此类推。

扩展表达式:

与基本表达式基本相同,不同点无需\转义。

另比基本表达式多有|元字符:

|:或者

例:cat|Cat

cat或者是Cat。易出现t|C之类的错误

正则表达式的用法:

grep [option].. ‘PATTERN‘ FILE...

option选项:

-v: 反向选取

-o: 仅显示匹配的字串,而非字串所在的行

-i: ignore-case,忽略字符大小写

-E: 支持使用扩展正则表达式

-A #:显示匹配到行的后几行

-B #:显示匹配到行的前几行

-C #:显示匹配到行的前后几行

例:grep -o "^root" /etc/passwd

这里举例出正则表达式常用,其它的需要进一步了解可以查阅手册或资料。如有不当之处请大神指点。

时间: 2024-08-02 08:49:11

初学正则表达式的相关文章

初学正则表达式2(在Perl下使用)

/** * 在Perl下的使用: * #华氏温度和摄氏温度之间的转换功能更加完善 print "请输入要转换的温度,例如:20C/30F\n"; $input = <STDIN>; #获取输入的内容 chomp($input); #去掉文本结尾的换行 if($input =~ m/^([-+]?[0-9]+(\.[0-9]*)?) *([CFcf])$/){ # m/^([-+]?[0-9]+)(\.[0-9]*)?([CFcf])$/等价于: $inputNum = $1

JS 初学正则表达式

正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度 匹配中文:[\u4e00-\u9fa5] 英文字母:[a-zA-Z] 数字:[0-9] 匹配中文,英文字母和数字及_: ^[\u4e00-\u9fa5_a-zA-Z0-9]+$ 同时判断输入长度:[\u4e00-\u9fa5_a-zA-Z0-9_]{4,10} ^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$ 1.一个正则表达式,只含有汉字.数字.字母.下划线不能以下划线开头和结尾:^(?!_)(?!.*?_$)[a

正则表达式中的逆向思维

人们的正常思维都是顺向的,那么逆向思维呢,特别是初学正则表达式的同学们,好不容易掌握了正则表达式的用法,再突然要你用逆向思维做题,会有很多不适应: 这里拿三道题,来做简单介绍: 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

python 优雅的使用正则表达式 ~ 1

正则表达式简介 正则表达式 , 也称谓 REs , 本质上是一个微小且高度专业化的编程语言. 他被嵌入到许多语言当中 , 例如 python 就是通过 re 模块来提供给我们使用 , 正则表达式 是通过一些规则来哦描述那些你希望匹配的字符串 .    python的 正则表达式 是通过 C语言写的 , 所以效率非常得高 ( 效率就是生命 )   python的 正则表达式 可已解决大部分的字符串匹配问题 , 但是对于有些字符串来说 ,  用正则表达式 是非常费心费力的 . 所以一小部分还需要牺牲

C#正则表达式编程(三):Match类和Group类用法

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhoufoxcn.blog.51cto.com/792419/281956 前面两篇讲述了正则表达式的基础和一些简单的例子,这篇将稍微深入一点探讨一下正则表达式分组,在.NET中正则表达式分组是用Math类来代表的.首先先看一段代码: /// <summary>/// 显示Match内多个Group的例子/// </summary>public void Show

个人理解正则表达式——懒惰匹配

问题描述 本文链接:http://www.hcoding.com/?p=130 初学正则表达式的时候都有一个疑问,例如:需要匹配串 "_abc_123_" 中 第一对"_"之间的字符,刚开始学习正则表达式的时候会写成 "/_\w*_/",匹配的结果就是"abc_123" 而不是"abc"了:大神说加上一个问号,"/_\w*?_/",这时候匹配的结果就是"abc". 我

c#如何使用正则表达式ZZ

什么是正则表达式      正则表达式是用来检验和操作字符串的强大工具.简单的理解正则表达式可以认为是一种特殊的验证字符串.正则表达式常见运用是验证用户输入信息格式,比如上面的那组"\w{1,}@\w{1,}\.\w{1",实际上就是验证邮件地址是否合法的:当然正则表达式不仅仅是用于验证,可以说只要运用字符串的地方都可以使用正则表达式: 涉及的基本的类      正则表达式在英文中写作(Regular Expression),根据正则表达式的使用范围和单词意思,.NET将其命名空间设置

Java语言中的正则表达式

正则表达式是什么? 正则表达式是一种强大而灵活的文本处理工具.初学正则表达式时,其语法是一个难点,但它确实是一种简洁.动态的语言.正则表达式提供了一种完全通用的方式,能够解决各种字符串处理相关的问题:匹配.选择.编辑以及验证.一般来说,正则表达式就是以某种方式来描述字符串. 日常例子 在文本中查找“halu126”,我们通常会在查找框中输入“halu126”,这就是一个最简单的正则表达式的例子,使用精确的匹配这样的字符串,如果我 们即想在文本中找到“halu126”,又想找到“Halu126”,

读取csv文件和匹配时间的正则表达式

今天又和前端联调了一天的程序,比较烦.产品有个需求是日期和时间分开显示的,正常都是两个连在一起然后用空格隔开,因为要想校验时间的对错,就需要把传过来的时间用strtotime转换成时间戳,然后在用date转换成时间格式,但是若是传的时间格式不对,那么最后转换成的时间就是unix的初始时间08:00:00,这样存在一个问题就是万一活动的开始时间就是08:00:00呢?所以我就把日期和时间放在一起转成时间戳,因为不管日期还是是时间出错,只要有一个错的传换回来的日期已一定会是1970-01-01,所以