S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

正则表达式学习笔记.2014.11.04

Posted on 2014-11-04 11:36 S.l.e!ep.¢% 阅读(1416) 评论(0)  编辑 收藏 引用 所属分类: Skynet

主要摘取自 这里, 正则表达式测试采用 这里,  版权归原作者所有


不幸的是,很多单词里包含hi这两个连续的字符,比如him,history,high等等。用hi来查找的话,这里边的hi也会被找出来。如果要精确地查找hi这个单词的话,我们应该使用\bhi\b

\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置

例子(黄色底表示匹配):

\bhello\b

匹配字符串

hello world

helloworld



假如你要找的是hi后面不远处跟着一个Lucy,你应该用\bhi\b.*\bLucy\b

这里,.是另一个元字符,匹配除了换行符以外的任意字符*同样是元字符,不过它代表的不是字符,也不是位置,而是数量——它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配因此,.*连在一起就意味着任意数量的不包含换行的字符。现在\bhi\b.*\bLucy\b的意思就很明显了:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词

\bhello\b.*\bworld\b

hello wor
ld
hello abc world


\d是个新的元字符,匹配一位数字(0,或1,或2,或……)
这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次)

\d{2}\d{8}

02012345678a
02012345678


. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

* 与 + 的区别: 不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次


例子:

w开头,总长为7的字母或数字或下划线或汉字

^w\b\w{6}\b      -----> 错误

^w\w{6}\b        -----> 正确

以abc结束的的字母或数字或下划线或汉字

\w*abc$  ------> 正确



\babc\w{6}

wwfdsddfds abcwwwwww
wwfdsddfdsabcwwwwww

abc\w{6}

wwfdsddfds abcwwwwww
wwfdsddfdsabcwwwwww

\babc\b

wwfdsddfds abc wwwwww
wwfdsddfdsabcwwwwww


^表示开始

$表示结束


字符转义

. 用 \.

* 用 \*

\ 用 \\



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理