与或非实习day08
---恢复内容开始---
今天的练习正则表达式:
建议 30 分钟学习 :http://deerchao.net/tutorials/regex/regex-1.htm
比赛网站: https://alf.nu/RegexGolf
什么是正则表达式?
正则表达式也是用来进行文本匹配的工具,只不过比通配符更能精确地描述你的需求
\d+就是一个简洁的代码,代表着规则1位或更多位数字 2008就符合这个规则,而A3则不符合(它包含了不是数字的字符)
\b是正则表达式规定的一个特殊代码,代表着单词的开头或结尾 \bhi\b。
假如你要找的是hi后面不远处跟着一个Lucy,你应该用\bhi\b.*\bLucy\b。
.是另一个特殊代码,代表除了换行符以外的任意字符。*同样是特殊的代码,不过它代表的不是字符,也不是位置,而是数量--它指定*前边的内容可以重复任意次以使整个表达式得到匹配。.*连在一起就意味着任意数量的不包含换行的字符。现在\bhi\b.*\bLucy\b的意思就很明显了:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词
0\d\d-\d\d\d\d\d\d\d\d代表着这样的字符串:以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字(也就是中国的电话号码,当然,这个例子只能匹配区号为3位的情形,
数字的出现是代表前面可以出现多少次
表达式:0\d{2}-\d{8} 这里\d后面的{2}({8})指定的是前面\d必须连续重复出现2次(8次)。
现在你已经知道几个具有特殊意义的代码了,如\b,.,*,还有\d.事实上还有更多的特殊代码,比如\s代表任意的空白符,包括空格,制表符(Tab),换行符。\w代表着字母或数字。
QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$
字符转义
如果你想查找特殊代码本身的话,比如你查找.,或者*,就出现了问题:你没法指定它们,因为它们会被解释成其它的意思。这时你就必须使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.
例如:deerchao\.cn匹配deerchao.cn,c:\\windows匹配c:\windows,2\^8匹配2^8(通常这是2的8次方的书写方式)。
字符类
我们也可以轻松地指定一个字符范围,像[0-9]代表的含意与\d就是完全一致的
一位数字,同理[a-z0-9A-Z]也完全等同于\w
复杂的表达式:\(?0\d{2}[) -]?\d{8}。几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等
反义(大写就是反义【^这要写在里面才是反的,写在外面是以什么开头】)
如果想要重复一个字符串又该怎么办?
你可以用小括号来指定子表达式(也叫做分组),
\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。
---恢复内容结束---