免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 766 | 回复: 0

正则表达式 -- 2 [复制链接]

论坛徽章:
0
发表于 2011-12-20 09:48 |显示全部楼层
正则表达式:
元字符(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)$
链接:
<a[^>]*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+_\-\.%=&amp;]*)?)?(#[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)      <an xml tag>
2)      <opentag> <closetag>
3)      </closetag>
4)      <>
5)      <with attribute=”77”>

解释及答案:
/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个或者任意个>除外的字符,最后跟一个>
<with attribute=”77”>
</closetag>
<an xml tag>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP