正则表达式详解和案例

前端之家收集整理的这篇文章主要介绍了正则表达式详解和案例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

正则表达式是通过一些特殊符号的排列,用以查找、替换、删除一行或者多行文字字符串。对于程序来说,更加重要的用途是验证字段的合法性。本文介绍Linux和常用程序的正则表达式的使用。


一、Linux中grep工具的介绍和简单使用

grep [option] ‘正则’ filename

-i :忽略要匹配内容的大小写

-n:输出匹配到行的行号

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

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

如:匹配/etc/test.txt中含有test的字符串

greptest/etc/test/txt


如:匹配/etc/passwd下含有root这个字符串信息的用户信息,并显示匹配到的信息所在的行

[root@MyTesting/]#grep-nroot/etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin


二、基本的正则表达式匹配

(1)特殊符号表示正则,如下常用匹配内容

Linux中所支持的匹配

[[:digit:]] 代表数字0-9

[[:lower:]] 代表小写字母a-z

[[:upper:]] 代表大写字母A-Z

[[:space:]] 代表空格,包括tab

[[:punct:]] 代表标点符号

[[:alpha:]] 代表任何英文字母,a-z和A-Z

[[:alnum:]] 代表任何英文字母和数字


常用编程语言所支持的匹配

\d 代表数字0-9

\D 代表非数字0-9

\w 代表任何英文字母和数字,包括下划线

\W 代表非任何英文字母和数字,包括下划线

\s 代表任何空白字符

\S 代表非空白字符

\b 代表单词的边界

\B 代表非单词的边界

\n 代表一个换行符

\r 代表一个回车符


例如:

把/etc/passwd下的含有大写字母的行列出来

grep --color '[[:upper:]]' /etc/passwd

wKiom1X9mrHTCBU0AAMn4u_xl3o690.jpg



(2)特俗符号匹配

1、字符匹配

[]:表示范围内的匹配,如匹配0-9范围,则可表示为[0-9]

.:表示任意单个字符


2、次数匹配

*:表示任意长度次数的匹配,.*则表示任意长度的任意字符,可以匹配任何内容

如:

grep--color'r.*t'/etc/passwd

wKioL1X9nQeSj0xQAAHTMJ5Sbd4667.jpg

\?:匹配0次或者1次

如:

grep--color't\?'/etc/passwd

wKioL1X9nTmSsrYRAAHB_qvtim0588.jpg



有没有匹配到t的行都显示出来


\+:匹配一次以上

如:

grep--color't\+'/etc/passwd

wKioL1X9nWHgUo_OAAHoM_FgkR4927.jpg

只有匹配到有t的行才会被显示出来

{m}:精确匹配m次,如{2},精确匹配2次

{m,n}:至少匹配m次,至多匹配n次,如{1-10},出现1-10次都会被匹配到

{m,}:匹配m次以上,如{3,},出现3次以上才会被匹配到

{0,n}:至多匹配n次,如{0,3},出现3次以下的才会被匹配到

如:匹配 /etc/passwd中,出现4位数字以上的行

grep--color'[[:digit:]]\{4,\}'/etc/passwd

wKiom1X9m13g02psAAEvuyxCoas134.jpg


(3)位置锚定

^:匹配首部

$:匹配尾部

\<:匹配单词开始,可以用\b代替

\>:匹配单词结束,可以用\b代替

^$:匹配空白行

如:匹配 /etc/passwd中,首部出现root的行

grep--color'^root'/etc/passwd

wKiom1X9m3uABWPfAAC1v9S0ieU327.jpg


(4)分组

():表示分组

如:匹配 /etc/passwd中,用户为root或者bin的行

grep--color'^\(root\|bin\)'/etc/passwd

wKioL1X9nd2T08e8AAB7kweQPy4693.jpg


(5)后项引用

后项引用是指引用分组里面匹配到的内容

如第一个括号分组匹配到的内容,用\1表示

如:匹配/etc/passwd中开头为root,之后又出现root的行。

grep-E--color'^(root).*\1'/etc/passwd

wKiom1X9m8DxIPb3AABTdyxCUwc122.jpg


三、扩展正则表达式

扩展正则表达式跟基本表达式差不多,基本匹配语法为:

grep -E ‘正则’ filename 或者

egrep ‘正则’ filename

支持元字符如下:

.:表示任意字符

[]:表示符合中括号内的范围字符

[^]:表示匹配非中括号范围内的字符

*:表示匹配任意次

?:表示匹配0次或1次

+:表示至少匹配1次

{m}:表示精确匹配m次

{m,n}:表示至少匹配m次,至多匹配n次

{m,}:表示匹配m次或以上

{0,n}:表示最多匹配n次

^:表示开头匹配

$:表示结尾匹配

\<,\b:表示匹配开头单词

\>,\b:表示匹配结尾单词

^$,^[[:space:]]*$:表示匹配空白字符

():表示匹配分组,匹配括号内的整个字符串内容

\1,\2,\3:表示引用分组分别为第1,2,3个的内容


四、常用正则表达式匹配

(1)找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行

grep-o-E"\<[[:alnum:]]+\>\(\)"/etc/rc.d/init.d/functions

wKiom1X9m9-htnHoAACoCoqwlac995.jpg


(2)使用echo命令输出一个路径,而后使用grep取出其基名。如/etc/sysconfig,取基名则为sysconfig

echo'/etc/sysconfig/'|grep-o-E"[[:alnum:]]+/?$"|cut-d/-f1

wKioL1X9noqgjYW8AAEcJlvl3W8622.jpg


(3)找出ifconfig命令结果中的1-255之间的数字

ifconfig|grep-o-E"[[:digit:]]|[[:digit:]][[:digit:]]|2[0-4][[:digit:]]|25[[:digit:]]

wKiom1X9nG_h1HJRAACMteadcog242.jpg


(4)写一个模式,能匹配合理的ipv4地址

ifconfig|grep-o-E"([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-3][0-9])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

wKiom1X9nLDj0BqaAAD8Akf3pok532.jpg

猜你在找的正则表达式相关文章