文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>正则表达式及元字符解析

正则表达式及元字符解析

时间:2010-10-28  来源:cup

元字符分为两类:shell元字符和正则表达式元字符。Shell元字符由linux的shell来解析,如rm *,此处的*为一个shell元字符,即通配符。Shell将其含义解析为“匹配当前目录下的所有文件名”。

正则表达式元字符由各种执行模式匹配操作的程序来解析,如vi、grep、sed、awk。正则表达式元字符是一类特殊的字符,通过它们以某种方式界定模式,从而控制进行哪些替换。可以使用元字符来定位在行首或者行尾出现的单词。也可以用元字符指定任意字符或某一组字符,从而实现同时查找大写和小写字符,或只查找数字等操作。

正则表达式元字符表

元字符

功能

示例

匹配对象

^

行首定位符

/^home/

匹配所有以home为开头的行

$

行尾定位符

/home$/

匹配所有以home为结尾的行

.

匹配单个字符

/h..e/

匹配包含h后跟两个字符,在跟个e的行

*

匹配0或多个重复位于*前的字符

/*home/

匹配包含零个或多个home之前的字符,不含空格

[]

匹配一组字符中的任一个

/[Hh]ome/

匹配包含Home或home的行

[x-y]

匹配指定范围内的一个字符

/[x-z]cas/

匹配包含在x到y之间的任意字符

[^]

匹配不在指定组内的字符

/[^x-y]/

匹配不在x到y之间的任意字符

\

转义元字符

/home\./

匹配包含home.的字符,\.用来转义句号.

\<

词首定位符

/\<home/

匹配包含home开头的字符

\>

词尾定位符

/home\>/

匹配包含home结尾的字符

\(..\)

匹配稍后要使用的字符的标签

/\(love\)able\1er/

模式love被保存为标签1,用\1表示,可以使用\1代替love

X\{m\}

字符x出现的次数,m次

O\{5\}

匹配包含5个0的字符

X\{m,\}

字符x出现的次数,至少m次

o\{5,\}

匹配包含至少5个o的字符

X\{m,n\}

字符x出现的次数,至少m次,不超过n次

O\{5,10\}

匹配包含5到10个包含字母0的字符

举例:(Vi中使用)

/home/: 查找vi中home单词。

/^home/: 查找vi中以home为首的行

/home$/: 查找vi中以home为结尾的行

/h..e/: 查找vi中h开头后面接着任意两个字符,e结尾的单词

/h*me/: 查找vi中h开头me结尾中间零个或任意多个字符的单词,不含空格

/[hH]ome/: 查找vi中Home和home的单词

/hom[a-z]/: 查找vi中hom后跟着任何一个ASCII码值在a-z之间字符的单词,[a-z]表示小写字母

/home[^a-ZA-Z0-9]/: 查找vi中包含home后面跟着特殊字符,不含大写,小写字母和数字的字符。如home. Home, home@等。

/\<h.*e\>/: 查找vi中包含h开头,e结尾,中间包含零个或若干个字符的字段/单词

1,$/\(love\)er/\1ory/g:vi中将love作为标签1,将loveer替换成loveory。

Grep与正则表达式元字符

命令格式:grep word filename filemane

Grep aa bb

Echo $? #查看grep查找之后的退出状态。0为成功,1为没有找到模式bb,2为搜索不到文件aa

2

grep aa /etc/passwd: 打印/etc/passwd中,包含正则表达式aa的行。

Grep aa /etc/pass*: 打印/etc/pass开头的文件中,包含正则表达式aa的行

Grep ‘^a’ /etc/passwd: 打印/etc/passwd中,a开头的行。

Grep ‘bash$’ /etc/passwd: 打印/etc/passwd中,bash结尾的行。

grep 'root\:' /etc/passwd: 打印/etc/passwd中root后跟个:正则表达式的行

grep '\:x' /etc/passwd: 打印/etc/passwd中x前跟个:正则表达式的行,打印所有包含:x的行

grep '^[tx]' /etc/passwd: 打印/etc/passwd中包含以t、x开头的行

grep '[a-z]\{9\}' /etc/passwd: 打印/etc/passwd中包含至少9个小写字母的行

grep '\<root' /etc/passwd: 打印/etc/passwd中包含root开头单词的行

grep '\<root\>' /etc/passwd: 打印/etc/passwd中包含root词的行,即包含单词root的行

grep -n '\<root' /etc/passwd: 打印/etc/passwd中包含root开头单词的行,并标明行号

grep -w 'root' /etc/passwd: 打印/etc/passwd中包含root的行

grep '\broot\b' /etc/passwd: 打印/etc/passwd中包含root的行,\b是词分界线。

-n:显示行号

-i:比较字符时忽略大小写

-v:反向查找,显示不匹配的行

–c:显示匹配的行的数目,不显示行的内容

egrep 'ro+' /etc/passwd: 打印/etc/passwd中包含ro后跟一个或若干字符串的行

egrep 'root|caiwu' /etc/passwd: 打印/etc/passwd中包含root或caiwu的字符串的行

egrep 's(shd|ell)' /etc/passwd: 打印s后面跟shd或ell的字符串的行

egrep '2\:?[0-9]' /etc/passwd: 打印2后面跟0个或一个数字在跟:的字符的行

?匹配零个或一个前导字符,lo?ve:l后面跟0个或一个o在跟ve的字符,如love,lve

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载