基本元字符集(Metacharacters)及其含义
^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-
表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
/ 只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有
特殊含义。/可以使其失去应有意义
. 只匹配任意单字符
pattern/{n/} 只用来匹配前面p a t t e r n出现次数。n为次数
pattern/{n,/} 只含义同上,但次数最少为n
pattern/{n,m/} 只含义同上,但p a t t e r n出现次数在n与m之间
边界匹配( Boundary Matchers)
如果要匹配所有空行,执行以下操作:
^ $
具体分析为匹配行首,又匹配行尾,中间没有任何模式,因此为空行。
如果只返回包含一个字符的行,操作如下:
^ . $
使用*匹配字符串中的单字符或其重复序列
使用此特殊字符匹配任意字符或字符串的重复多次表达式。例如:
compu*t
将匹配字符u一次或多次:
computer
computing
compuuuuuuut
使用/屏蔽一个特殊字符的含义
如果要在正则表达式中匹配以*.pas结尾的所有文件,可做如下操作:
/*/.pas
即可屏蔽字符*的特定含义。
使用[]匹配一个范围或集合
使用[ ]匹配特定字符串或字符串集,可以用逗号将括弧内要匹配的不同字符串分开,但并
不强制要求这样做(一些系统提倡在复杂的表达式中使用逗号),这样做可以增加模式的可读性。
使用“-”表示一个字符串范围,表明字符串范围从“-”左边字符开始,到“-”右边字 符结束。
假定要匹配任意一个数字,可以使用:
[0123456789]
然而,通过使用“-”符号可以简化操作:
[0-9]
或任意小写字母
[a-z]
要匹配任意字母,则使用:
[A-Za-z]
注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。
[^a-zA-Z]
匹配任一非字母型字符,而
[^0-9]
匹配任一非数字型字符。
使用/{/}匹配模式结果出现的次数
请看第一个例子,匹配字母A出现两次,并以B结尾,操作如下:
A/{2/}B
匹配值为AAB
匹配A至少4次,使用:
A/{4,/}B
可以得结果AAAAB或AAAAAAAB,但不能为AAAB。
经常使用的正则表达式举例
^ 对行首
$ 对行尾
^[the] 对以the开头行
[Ss]igna[lL] 对匹配单词signal、signaL,Signal、SignaL
[Ss]igna[lL]/. 对同上,但加一句点
[mayMAY] 对包含may大写或小写字母的行
^USER$ 对只包含USER的行
[tty]$ 对以tty结尾的行
/. 对带句点的行
^d..x..x..x 对用户、用户组及其他用户组成员有可执行权限的目录
^[^l] 对排除关联目录的目录列表
[.*0] 对0之前或之后加任意字符
[000*] 对000或更多个
[iI] 对大写或小写I
[iI][nN] 对大写或小写i或n
[^$] 对空行
[^.*$] 对匹配行中任意字符串
^......$ 对包括6个字符的行
[a-zA-Z] 对任意单字符
[a-z][a-z]* 对至少一个小写字母
[^0-9/$] 对非数字或美元标识
[^0-0A-Za-z] 对非数字或字母
[123] 对1到3中一个数字
[Dd]evice 对单词device或Device
/^q 对以^q开始行
^.$ 对仅有一个字符的行
^/.[0-9][0-9] 对以一个句点和两个数字开始的行
'"Device"' 对单词device
De[Vv]ice/. 对单词Device或device
[0-9]/{2/}-[0-9]/{2/}-[0-9]/{4/} 对日期格式dd-mm-yyyy
[0-9]/{3/}/.[0-9]/{3/}/.[0-9]/{3/}/.[0-9]/{3/} 对IP地址格式nnn.nnn.nnn.nnn
[^.*$] 对匹配任意行
More info about Java Regex