正则表达式:
元字符(metacharcter)
\b 表示一个位置,通常用来界定一个单词的范围\bhi\b
\B 非字母开头和结尾
. 表示一个字符,除换行符以外
\d 表示一个数字字符
\D 表示非数字字符
\s 表示不可见的空格、制表符tab,或者换行符、中文全角字符
\S 表示非空白符
\w 表示字母、数字或者下划线
\W 表示非字母、数字或者下划线
^x 表示x开始
[^x] 表示非x开始
x$ 表示x结尾
重复(粘帖前一个字符或者组)
+ 表示1个或者多个
? 表示0个或者一个
* 表示0个或者多个
{n} 表示n个
{n,} 表示至少n个
{n,m} 表示至少n个,但不超过m个
() 表示一个分组,分组从1开始,用\1,\2 ...表示
[] 表示其中或者一个范围中之一 [ac\d] 表示一个a或者c或者一个数字,[a-zA-Z0-9]表示a-z或者A-Z或者0-9之一
{} 表示粘帖的前一个字符或者分组的次数
| 表示或者,分支条件 0\d{2,3}-\d{7,8}
常见实例:
ip地址:
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
单词分割:
/^[\p{L}\p{N},]+$/u 匹配任意unicode字符,中间用英文逗号(,)分割
email:
^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2,3}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)$
链接:
]*href=\"[^\s\"]+\"[^>]*>[^<]*<\/a>
URL:
^([a-z]+:\/\/)?([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(:[0-9]{1,5})?(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?$
练习:
[root@ /UNIX]# sed -n '/^$/p' re > re.txt
[root@ /UNIX]# cat re.txt
1 Which of the following matches regexp /a(ab)*a/
1) abababa
2) aaba
3) aabbaa
4) aba
5) aabababa
2 Which of the following matches regexp /ab+c?/
1) abc
2) ac
3) abbb
4) bbc
3 Which of the following matches regexp /a.[bc]+/
1) abc
2) abbbbbbbb
3) azc
4) abcbcbcbc
5) ac
6) asccbbbbcbcccc
4 Which of the following matches regexp /abc|xyz/
1) abc
2) xyz
3) abc|xyz
5 Which of the following matches regexp /[a-z]+[\.\?!]/
1) battle!
2) Hot
3) green
4) swamping.
5) jump up.
6) undulate?
7) is.?
6 Which of the following matches regexp /[a-zA-Z]*[^,]=/
1) Butt=
2) BotHEr,=
3) Ample
4) FIdDlE7h=
5) Brittle =
6) Other.=
7 Which of the following matches regexp /[a-z][\.\?!]\s+[A-Z]/
(\s matches any space character)
1) A. B
2) c! d
3) e f
4) g. H
5) i? J
6) k L
8 Which of the following matches regexp /(very )+(fat )?(tall|ugly) man/
1) very fat man
2) fat tall man
3) very very fat ugly man
4) very very very tall man
9 Which of the following matches regexp /<[^>]+>/
1)
2)
3)
4) <>
5)
解释及答案:
/a(ab)*a/ a后面跟0个或者多个ab,再跟一个a
abababa aba
/ab+c?/ ab后面跟任意多字符,再跟0个或者多个c
abc abbb
/a.[bc]+/ a后面跟一个任意字符,后面跟b或者c,再跟任意字符
abc abbbbbbbb azc abcbcbcbc asccbbbbcbcccc
/abc|xyz/ abc组合或者xyz组合
abc xyz
/[a-z]+[\.\?!]/ a到z中的任意一个字母,后面跟任意字符(不含空格回车),再跟一个.或者?或者!之一
battle! swamping. undulate?
/[a-zA-Z]*[^,]=/ 0个或者任意个大写或者小写字母,后面跟,号除外的字符,再跟一个=号
Other.= Butt=
/[a-z][\.\?!]\s+[A-Z]/ a到z中的一个字母,后面跟.或者?或者!之一,后面跟空格或者tab,再跟A到Z之一
g. H
i? J
/(very )+(fat )?(tall|ugly) man/ 1个或者任意个very 后面跟0个或者任意个fat ,后面跟tall或者ugly,后面跟一个空格,最后一个是man
very very very tall man
very very fat ugly man
/<[^>]+>/ <开始,后面跟1个或者任意个>除外的字符,最后跟一个>
阅读(1231) | 评论(0) | 转发(0) |