文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[2010-12-25]正则表达式

[2010-12-25]正则表达式

时间:2010-12-25  来源:kellysir

正则表达式是用来处理字符串的,对字符串的处理,有查、换两种基本操作。 1、要注意语系 2、特殊符号  代表意义
[:alnum:]  代表英文大小写字符及数字,亦即 0-9, A-Z, a-z
[:alpha:]  代表任何英文大小写字符,亦即 A-Z, a-z
[:blank:]  代表空格  [Tab] 按键两者
[:cntrl:]  代表键盘上面癿控制按键,包括 CR, LF, Tab, Del.. 等等
[:digit:]  代表数字而已, 0-9
[:graph:]  除了空格  [Tab] 按键) 外的其他所有按键
[:lower:]  代表小写字符, a-z
[:print:]  代表任何可以被打印出来的字符
[:punct:]  代表标点符号 (punctuation symbol),如:" ' ? ! ; : # $...
[:upper:]  代表大写字符, A-Z
[:space:]  任何会产生空白的字符,包括空格键, [Tab], CR 等等
[:xdigit:]  代表 16 进制数字类型,因此包括: 0-9, A-F, a-f 的数字与字符
3、grep
  • 入门级
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项不参数:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色显示喔!
 
范例一:将 last 当中,有出现 root 的那一行就查出来;
[root@www ~]# last | grep 'root'
 
范例二:与范例一相反,叧要没有 root 的就找出!
[root@www ~]# last | grep -v 'root'
 
范例三:在 last 的输出讯息中,叧要有 root 就找出,并且仅取第一栏
[root@www ~]# last | grep 'root' |cut -d ' ' -f1
# 在取出 root 后,使用用  cut 来处理,就能够仅取得第一栏啰!
 
范例四:查出 /etc/man.config 内含有 MANPATH 的那几行
[root@www ~]# grep --color=auto 'MANPATH' /etc/man.config
....(前面省略)....
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man
MANPATH_MAP     /usr/bin/mh             /usr/share/man
# 神奇的是,如果加上 --color=auto 的选项,找到的关键词部分会用特殊颜色显示喔!
  •  进阶级
[root@www ~]# grep [-A] [-B] [--color=auto] '搜寻字符串' filename
选项不参数:
-A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;
--color=auto 可将正确的那个撷取数据列出颜色
 
范例一:用 dmesg 列出核心讯息,再以 grep 找出内含 eth 那行
[root@www ~]# dmesg | grep 'eth'
eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
eth0:  Identified 8139 chip type 'RTL-8139C'
eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
eth0: no IPv6 routers present
# dmesg 可列出核心产生的讯息!透过 grep 来撷取网络卡相关信息 (eth) ,
# 就可发现如上信息。不过没有行号与特殊颜色显示!看看下个范例吧!
 
范例二:承上题,要将捉到的关键词显色,且加上行号来表示:
[root@www ~]# dmesg | grep -n --color=auto 'eth'
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0:  Identified 8139 chip type 'RTL-8139C'
294:eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
305:eth0: no IPv6 routers present
# 你会发现除了 eth 会有特殊颜色杢表示以外,最前面还有行号喔!
范例三:承上题,在关键词所在行的前两行与后三行也一起捉出来显示
[root@www ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'
245-PCI: setting IRQ 10 as level-triggered
246-ACPI: PCI Interrupt 0000:00:0e.0[A] -> Link [LNKB] ...
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0:  Identified 8139 chip type 'RTL-8139C'
249-input: PC Speaker as /class/input/input2
250-ACPI: PCI Interrupt 0000:00:01.4[B] -> Link [LNKB] ...
251-hdb: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB
Cache, UDMA(66)
# 如上所示,你会发现关键词 247 所在的前两行及 248 后三行也都被显示出来!
# 这样可以让你将关键词前后数据捉出来进行分析啦!  
 
  • 要搜索指定的字符串,该字符串以单引号括起来
如:在 a.txt中搜索含有 the 的行 grep -n 'the' a.txt 搜索不含 the 的行 grep -vn 'the' a.txt 搜索含有 the 但忽略大小写的行 grep -in 'the' a.txt
  • 字符集合,用[]括起来,用^表示不包括其后的指定的字符
如搜索 test taste==>t[ae]st grep -n 't[ae]st' a.txt 搜索以t开头不含有 a或e以st结尾的行 grep -n 't[^ae]st' a.txt [a-z]小写字母,对应[:lower:] [A-Z]大写字母,对应[:upper:] [0-9]数字,对应[:digit:]
  • 行首^、行尾$
如查找 the在行首的行 grep -n '^the' a.txt 查找每行开头是小写字母的行 grep -n '^[a-z]' a.txt (注意^在中括号外面) 查找非英文字母开头的行 grep -n '^[^a-zA-Z]' a.txt (注意^在中括号内、外都有,含义不同) 查找以.结尾的行 grep -n '.$' a.txt 查找空行 grep -n '^$' a.txt
  • 任意一个字符 . (句点)
  • 字符重复
* 重复其前面的字符0次或无限次 如:grep -n 'o*' a.txt 在a.txt中搜索含有o的行,实际上找出所有行 gtrep -n 'g.*g' a.txt 实际上最后的那个g无作用。 \{n\} 限定次数为n次 如:grep -m '9\{2\}' a.txt 查找9重复2次的 \{m,m\} 限定字符至少为n个,至多为m个   4、sed   [root@www ~]# sed [-nefr] [动作]     (特别要注意,运作要用单引号括起来)
选项不参数:
-n  :使用 (silent)模式。在一般 sed 的用法中,所有来自 STDIN的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
-e  :直接在指令列模式上进行 sed 的动作编辑;
-f  :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed动作;
-r  :sed 的动作支持的是延伸型正则表示法的语法。(预设是基础正则表达式语法)
-i  :直接修改读出的档案内容,而不是由屏幕输出。 
 
动作说明:  [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
 
function 有底下这些咚咚:
a   :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c   :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d   :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i   :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p   :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式语法
5、进阶 + 重复一次或一次以上,即至少重复一次 ? 重复0次或一次 |  表示二选其一,如 god|dog () 表示群组 ()+ 表示此组至少重复一次  
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载