加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式

发布时间:2020-12-13 19:53:38 所属栏目:百科 来源:网络整理
导读:正则表达式与扩展正则表达式 一、正则表达式 1、什么是正则表达式? 了解正则表达式之前我们首先来说一下什么是正正则表达式?正则表达式简单来说就是处理字符串的方法,再通俗一点来说就是:他是以行为单位来进行字符串的处理。正则表达式基上是一种表示方法

正则表达式与扩展正则表达式
一、正则表达式
1、什么是正则表达式?
了解正则表达式之前我们首先来说一下什么是正正则表达式?正则表达式简单来说就是处理字符串的方法,再通俗一点来说就是:他是以行为单位来进行字符串的处理。正则表达式基上是一种表示方法,如果程序工具能表示这种方法,那该程序工具就可以处理正则表达式的字符串。正则表示法的字符串表示方法也有不同,分为:基础正则表达式(Basic REGEXP)与延伸正则表达式(Extended REGEXP),延伸正则表达式不仅可以表示一些简单的组字符串处理,还可以处理群组字符串。
2、正则表达式:Regular EXPression,REGEXP:里面有一些元字符,很可能并不不表示它身的意义,表示通配的意义。在这里还要知道模式是什么?模式(Pattern)就是由字符或正则表达式的元字符组合起来,过滤文本的条件。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是使计算机更加智能化的重要途径和手段。
3、正则表达式的特点是:
(1) 灵活性、逻辑性和功能性非常的强;
(2) 可以迅速地用极简单的方式达到字符串的复杂控制。
4、正则表达式是由元字符和普通字符组成:
普通字符:包括大小写的字母和数字
二、基本正则表达式
1、元字符:
.:匹配任意单个字符 (grep 'r..' /etc/passwd)
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集,使用时需加[]:[:digit:],[:lower:],[:upper:],[:space:],[;alnum:]
2、匹配次数:(贪婪模式下,尽可能长的匹配)
.:匹配任意单个字符 (grep 'r..' /etc/passwd)
*:匹配其前面的字符任意次(a*b :n个a后跟个b)
.*:任意长度的任意字符(a.*b:以a开头b结尾grep ’a.*b‘ test.txt)
?:匹配其前面的字符一次或0次,表示可有可无
{m,n}:匹配其前面的字符至少m次,至多n次
{1,}:至少一次
3、位置锚定:
^:锚定行首,此字符串后面的内容必须出现在行首
grep ’^r..t' /etc/passwd :出现在行首
$:锚定行尾,此字符串前面的内容必须出现在行尾
grep ‘y$' /etc/passwd:以Y结尾的字符
^$:空白行 grep ’^$' /etc/passwd
&;或b:其后面的任意字符必须作为单词的首部出现grep ”&;root" test.txt
&;或b:其前面的任意字符必须作为单词的尾部出现grep "root&;" test.txt
&;root&; :以整个单词出现
grep ”&;root&;" test.txt
4、分组:
():
(ab)*:ab可以出现任意次,
后向引用:
1:第一个左括号以及与之对应的右括号所包含的所有内容
2:第二个左括号以及与之对应的右括号所包含的所有内容
3:第三个左括号以及与之对应的右括号所包含的所有内容
5、grep :默认使用基本正则表达式定义的模式来过滤文本的命令
全面搜索正则表达式,根据模式,搜索文本,并将符合模式的文本行显示出来
--color : grep --color ‘root' /etc/passwd(显示颜色)
-i:不区分大小写
-v:被模式匹配的行不显示,显示不能匹配的行
-o:只显示被模式匹配的字符串
-E:使用在扩展正则表达式
-A 数字:当每一行匹配后还会显示下面的内容(grep -A 2 ’^core id ' /proc/cpuinfo)
-B 数字:当每一行匹配后还会显示前面的内容(grep -B 2 ’^core id ' /proc/cpuinfo)
-C 数字:当每一行匹配后还会上下都显示你指定的行数(grep -C 2 ’^core id ' /proc/cpuinfo)
三、扩展正则表达式:默认工作在贪婪模式下
1、字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
2、次数匹配:
*:匹配其前面的字符任意次(a*b :n个a后跟个b)
?:匹配其前字符0次或1次
+:匹配其前面的字符至少1次
{m,n}:匹配其前面的字符至少m次至多n次(与基本正则表达式不同,需注意)
3、位置锚定:(与正则表达式一样)
^:锚定行首,此字符串后面的内容必须出现在行首
grep ’^r..t' /etc/passwd :出现在行首
$:锚定行尾,此字符串前面的内容必须出现在行尾
grep ‘y$' /etc/passwd:以Y结尾的字符
^$:空白行
&;或b:其后面的任意字符必须作为单词的首部出现
&;或b:其前面的任意字符必须作为单词的尾部出现
&;root&; :以整个单词出现
4、分组:
():分组,在扩展正则表达式中才真正实现了分组的意义
1,2,3
或者:|=or
a|b:a或者b
C|cat:C或者cat
grep -E ’C|cat‘ 文件名
grep-E’(C|c)at' 文件名:
grep -E '^[[:space:]]+' 文件名:至少一个空白符开头
注意 grep -E 是egrep!
. :逃逸符,让一个元字符表示它本身的意义,而不是元字符的意义
grep默认模式下是基本正则表达式的命令,而egrep则是扩展正则表达式的命令
fgrep :运行速度快,因为他不搜索正则表达式,不支持正则表达式,如果在搜索文本时不打算使用元字符,就使用fgrep,运行速度快。
例题
1、找出/boot/grub/grub.conf文件中1-255之间的数字
egrep '&;([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])&;' /boot/grub/grub.conf

结果:

2、查找ABC类IP地址
ifconfig | egrep --color '&;([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-1][0-9]|22[0-3])&;(.&;([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])&;){2}.&;([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])&;'
IPV4: 5类:ABC A:1-127 B:128-191 C:192-223

结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读