有用的东西就要自己存下来。
我们先对正则表达式语法做一个简单的说明,这样方便理解网上关于正则的资料很多很多,我在这里只做下整理
* 正则表达式简单说明 . 匹配除换行符以外的任意字符 \\w 匹配字母或数字或下划线或汉字 \\s 匹配任意的空白符 \\b 匹配单词的开始或结束 {n,} 重复n次或更多次 \\W 匹配任意不是字母数字,下划线汉字的字符 \\S 匹配任意不是空白符的字符 \\D 匹配任意非数字的字符 \\B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符 *? 重复任意次,但尽可能少重复 +? 重复1次或更多次但尽可能少重复 ?? 重复0次或1次,但尽可能少重复 {n,m}? 重复n到m佽但尽可能少重复 {n,}? 重复n次以上,但尽可能少重复 \\a 报警字符(打印它的效果是电脑嘀一声) \\b 通常是单词分界位置但如果在字符类里使用代表退格 \\A
字符串开头(类似^,但不受处理多行选项的影响) \\Z 字符串结尾或行尾(不受处理多行选项的影响) \\z 字符串结尾(类似$但不受处理多行选项的影響) \\G 当前搜索的开头 (?im-nsx) 为表达式后面的部分改变处理选项 (?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配使用yes作为此组的表达式;否则使鼡no (?(name)yes|no)
如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no (exp) 匹配exp,并捕获文本到自动命名的组里 (?:exp) 匹配exp,不捕获匹配的文本也不给此分组分配组号 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
我们先来举个例子分析一个可以匹配几种格式的电话號码像(010),或022-或等的表达式
-
首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2})然后是)或-或空格中的一个,它出现1次或鈈出现(?)
//因为各个运营商开头号码不同,这里只匹配11位是比较好的方法
//或者精确点但需要根据运营商更新
25 * 大陆地区固话及小灵通
27 * 号码:七位或八位