正则表达式:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。
扩展正则表达式元字符:
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数:
用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词
分组:
()
后向引用:\1, \2, …
或者:
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat
正则表达式中的3个重要符号:Bracket(括号), caret(插入符号)和Dollars(美元符号)
Bracket:
在正则表达式中有3种类型的括号
方括号 “[]”和花括号”{}” 。
方括号”[]”内是需要匹配的字符,花括号”{}”内是指定匹配字符的数量。
圆括号”()” 则用来分组。
Caret:
插入符号 “^” 表示正则式的开始。
Dollars:
美元符号”$” 表示正则式的结束。
现在你知道上面的3个语法后,你就可以写世界上任何一条验证规则了。比如下面的例子就很好的说明了上面3条正则语法是如何协调运作的:
^[a-z]{1,2}$
- 上面的这条正则式只能匹配a-z的英文字母,同样是在中括号中标明匹配范围。
- 花括号中则是标明匹配字符串的最小长度和最大长度。
- 最后为了让表达式更规则,分别在开头和结尾加上了插入符号”^”和美元符号”$”。
现在我们就用上面的3条语法来实现一些正则表达式的验证规则:
1.如何匹配像91230456, 01237648这样的固定8位数?
“^[0-9]{8}$”
2.如何验证最小长度为3最大长度为7的数字,如:123, 1274667, 87654?
“^[0-9]{3,7}$”
3.如何验证像LJI10201020那样的发票编号,前3个是字母剩余为8位长度的数字?
“^[[:alpha:]]{3}[0-9]{8}$”
4.如何验证简单的网址URL格式?
“^www[.][[:alnum:]]{1,}[.](com|org)$”
5.如何验证email格式?
“^[[:alnum:]]{1,}@[[:alnum:]]{1,}.(com|ong)$”
6.如何验证值在0-25的数字?
“^(([0-9])|(1[0-9])|(2[0-5]))$”
7.验证格式为YYYY/MM/DD的日期?
“^(1[9][7-9][0-9]|2[0][0-9][0-9])[/]([1-9]|0[1-9]|1[0-2])[-/]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])$”
以上例子由浅入深,基本涵盖了正则表达式的一些基本用法,有利于初级阶段的学习与思考。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95124