Perl正则表达式入门

1.简述

  • 正则表达式( Regular Expression, regexp )是一种描述字符串特征的语法规则 ,用于验证各种字符串是否匹配( Match)这个特征,进而实现高级的文本查找、替换、截取内容等操作 。 例如,要在大量的文本中找 出符合某个特征的字符串,就将这个特征按照正则 表达式的语法写出来,形成一个用于计算机程序识别的模式( Pattern),然后计算机程序就会根据这个模式到文本中进行匹配。
  • 正则表达式的形成与发展有着悠久的历史,在各种计算机软件中都有广泛应用 。 例如,在操作系统( UNIX 、 Linux 等)、编程语言( C 、 C ++、 Java 、 PHP 、 Python,] avaScript 等)、服务器软件( Apache 、 Nginx)的使用中都会遇到正则表达式。

2.入门语法

背景介绍

POSIX 和 Perl 语法。grep 命令支持 POSIX 和 Perl 两种正则表达式语法,默认情况下是 POSIX BRE 语法,指定选项 -E 可以切换到 POSIX ERE 语法,指定选项-P 可以切换到 Perl 语法(选项 E 和 P不可同时使用)。以下命令讲解基于Perl语法

1.grep命令

grep 支持对来自标准输入、管道( pipe )输入,以及文本文件的内容进行正则表达式搜索

1)标准输入

[root@ localhost ~]$grep --color 'hello'

上述示例中, grep 命令的 co l or 选项表示以彩色标注出匹配到的内容,参数 hello 是一个符合正则表达式语法的匹配模式,用于匹配内容 。该行命令执行后,在光标显示处利用键盘输入 hello world 或其他任意内容后,按回车键提交给 grep 进行匹配,结果如下所示。

hello world

hello world

2)管道输入方式

管道是 Linux 中支持的一种通信机制,其作用是将一个程序的输出作为另一个程序的输入 。 管道的符号是|,通过这个符号连接前后多个命令,具体示例如下。

[root@centos test]# cat word.txt 
hello world
[root@centos test]# cat word.txt |grep --color llo
hello world

3)文件方式

grep 命令的第 2 个参数是可选参数,用于读取指定的文件内容进行正则模式匹配。以读取指定文件 word.txt 为例,具体示例如下。

[root@centos test]# grep wor word.txt 
hello world

2.元字符、文本字符和转义字符

一个完整 的正则表达式由元字符和文本字符两部分构成。其中,元字符就是具有特殊含义的字符,如前面提到的"^" "$" "." "*",文本字符就是普通的文本,如字母和数字等。正则表达式定义许多元字符用于实现复杂匹配,而若要匹配的内容是这些字符本身时,就需要在前面加上转义字符“\”,如“\^”。"\"本身也属于元字符,用"\\"转义 。

1)转义字符的使用。

[root@centos test]# grep --color '[\^\$\\\.]'
12$fd^34.45\
12$fd^34.45\

2)分组

在正则表达式中还支持分组(又称为子模式、子匹配),用小括号"()"来实现 。 括号用于嵌套一个子模式,如下面的示例实现了匹配 aa 出现了3次的情况 。

[root@centos test]# grep -P --color '(aa){2}'
1234aaaadfg
1234aaaadfg

3)在单引号内匹配单引号,使用\x27

[root@centos test]# grep --color -P '\x27'
asss'dd
asss'dd

 3.语法规则

1.定位符

1)定位符
定位符 说明 示例 匹配结果
^ 匹配字符串开始的位置 ^hello helloworld
$ 匹配字符串结束的位置 world$ helloworld
注意:匹配空行可以使用^$

2)选择符,|

[root@centos test]# grep -P --color 'java|PHP'
who is the best language java or PHP
who is the best language java or PHP

3)字符范围

示例 说明 匹配结果
[abc] 匹配字符a,b,c abcdef
[^abc] 匹配不是a,b,c的字符 abcdef
[a-z] 匹配字母a~z范围内的字母 abcdef

4)点字符和限定符

字符 说明 示例 结果
. 匹配一个任意字符 a.d 可匹配 add asd afd
? 匹配前面的字符0次或1次 he?p 可匹配hep heep
+ 匹配前面的字符一次或多次 w+w 可匹配www wwww
* 匹配前面的字符0次或多次 go*gle 可匹配 gogle google gooogle ...
{n} 匹配前面的字符n次 go{1}gle 只可以匹配google

 4.应用案例

1)验证文件扩展名

只允许访问html,css,jpg扩展名的文件

^.*?\.(html|css|jpg)$

2)验证IP地址

^(([1-9]?\d|1\d{2}|2[0-4]\d|5[0-5]))\.){3}([1-9]?\d|1\d{2}|2([0-4]\d|5[0-5]))$

3)验证日期格式

^[1-9]\d{3}-([1-9]|1[0-2])-([1-9]|[1-2]\d|3[01])$

猜你喜欢

转载自blog.csdn.net/ly853602/article/details/93028716
今日推荐