正则表达式常见例题

常见例题

例1:北美地区的电话号

编码方案:电话号码有一个3位数的区号和一位7位数的号码组成(这个7位数有分成  一个3位的局号和一个4位的路号,局号和路号之间使用连字符分隔) 每位电话号码可以是任意数字,但是区号和局号的第一位数字不能是0或1.实际书写号码是往往会把区号写在括号里面,或者将区号使用连字符和后面的局号连接起来。例如:(555)123-1234或555-123-1234,有时候在括号你里面会包含空格。例如:(555 )123-1234

文本:

J.Doe:248-555—1234

B.Smith:(313)555-1234

A.Lee:(810)555-1234

正则表达式:

\(?[2-9]\d\d\)?[-]?[2-9]\d\d-\d{4}

扩展1:还要匹配像555.555.5555这样的号码,其正则表达式为如下

[\(.]?[2-9]\d\d[\).]?[-.]?[2-9]\d\d[-.]\d{4}

例2:中国固定电话号码

最开始的一位一定为0表示长途,接着是2位、3位或者4位组成的区号,然后是7位或是8位的电话号码(其中首位不为1)。

文本:

029 88457890

02988457890

(029)88457890

029-88457890

029-8845-7890

正则表达式:(注意0后面的一位不能再是0)

[\(]?0[1-9]\d{1,3}[\(]?[-]?[2-9]\d{2,3}[-])?\d{4}

例3:美国邮政编码

使用ZIP或者是ZIP+4编码,ZIP+4是可选的,ZIP由5位号码组成,ZIP+4添加了4位,这后面的4位要与前面的5位用连字符分隔开来。

正则表达式:

\d{5}(-\d{4})?

例4:中国邮政编码

我国邮政编码的规则是,前两位是省市自治区,第三位代表邮区,第四位代表县市,最后两位代表投递邮局,总共6为数字。其中第二位不为8(港澳前两位为99,其余为0-7)

正则表达式:

\d[0-79]\d{4}   \d(9|[0-7])\d{4}

例5:加拿大邮政编码(一般不区分大小写,所以)

由6个字母和数字交替出现的字符构成。每个编码分成两部分:FSA(forwardsortation area,地区代码),后三个字符给出LDU(localdelivery unit,街道代码)。第一个我字符代表省市或地区,且第一个字符有十八中选择。通常书写邮政编码时,FSA和LUD要用空格分隔。

文本:

123 4th Street, Toronto, Ontario, M1A 1A1

567 8th Avenue, Montreal, QeuBec, H9Z,9Z9

正则表达式:

[ABCEGHJKLMNPRSTVXY]\d[A-Z]\d[A-Z]\d

例6:英国邮政编码

由5个、6个或7个字符构成,由外吗和内码构成;外码是一个或两个字母后跟一个或两个数字 ,或者是一个或两个字母后跟一个数字和一个字母;内码是一位数字后面跟两个字母(除了C、I、K、O、V以外的任意字母)。外码和内码之间要用一个空格隔开。

正则表达式:

[A-Z]{1,2}\d[A-Z\d]? \d[ABD-HJLNP-UW-Z]{2}

例7:美国社会安全码(SSN,social securitynunber)

是由3组连字符隔开的数字构成:第一组包含3位数字,第二组包含3位数字,第三组包含4位数字,

正则表达式:

\d{3}-\d{2}-\d{4}

例8:中国人民共和国公民身份号码

可能是15位或者18位。前六位是户口所在地的编码,其中第一位是1-8,此后是出生年月日,出生年份的前两位只能是18、19、20,且是可选的,月份的第一位只能是0、1,日期的第一位只能是0-3;最后一位是校验位是数字或者是X,是可选的。

正则表达式:

[1-8]\d{5}((18|19|20))?\d{2}[0-1]\d[0-3]\d{4}[\d|x]?(\d|x)?

例9:IP地址的正则表达式

正则表达式:

(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5))\.){3}

(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5)))

例10: URL地址

对URL地址进行匹配是一个相当困难的任务,其复杂性取决于你想获得多么精确的匹配结果。最简单的情况下,URL应该匹配的内容有:协议名(http|https),一个主机名,一个可选的端口号,一个文件路径。

文本:

http://www.forta.com/blog

http://www.forta.com/

https://ben:[email protected]/

http://localhost:8080

正则表达式:

https?://[-\w.]+(:\d+)?(/([\w\/._]*)?)?

缺点:

不能正确处理查询字符串,也不能正确理解嵌在URL中的”username:

password”

例11:完整URL地址

可以匹配URL查询字符串(嵌在URL地址里的变量信息,这些信息是用?分开的);以及可选的用户登录信息。

正则表达式:

https?://(\w*:\w*@)[-\w.]+(:\d+)?(/([\w/_.]*(\?\S+)?)?)?

说明:

(\w*:\w*@): 用于匹配用于匹配嵌在URL中的用户名和口令;

(\?\S+)?:    用于匹配查询字符串;

这个模式比较复杂实际处理速度比较慢,如果没有什么特殊的必要还是不使用比较好。

例子12:电子邮件地址

正则表达式:

(\w+\.)*\w+@(\w\.)+[A-Za-z]+

说明:

(\w+\.)*: 用于匹配一个或多个由.结束的文本如ben|ben.forta.

\w+:       匹配必不可少的文本;

(\w\.)+:  匹配至少一个由.结束的文本;

[A-Za-z]+: 匹配顶级域名

缺点:

能够匹配[email protected]但明显不是一个合法的匹配,不能匹配有IP地址组成的电子邮件地址

例13:HTML注释

HTML中的注释必须在<!-- -->标签之间必须至少包含两个连字符。多于两个是没有关系的。

正则表达式:

<!-{2,}.*?-{2,}>

说明:

这里使用懒惰型元字符。

例14:JavaScript注释

代码注释是以//开头的

正则表达式:

//.*

例15:信用卡号码

信用卡号码本身的合法性不能使用正则表达式来检查,最终要有信用卡发行机构做出,我们所说的检查是指使用正则表达式来检查信用卡号码是否符合格式。所有信用卡都遵循着同一种基本的编码模式:以特定数字序列开头,号码的总位数是一个固定值。下面是MasterCard的情况。

正则表达式:

5[1-5]\d{14}

对于Visa卡来说其信用卡号码组成有点复杂,Vis卡第一位永远为4,总长度为13或16

正则表达式:

4\d{12}(\d{3})?

但对于Discover Club卡来说,总长度为14位,必须以300到305,36或38开头;若前三位号码是300到305,后面必须再有11位数字;如果前两位号码是36或38,则后面必须再有12为数字,

正则表达式:

(30[0-5]|36\d|38\d)\d{11}

下面使用吧上面的所有模式组合既能够得到一个综合的匹配模式:

(5[1-5]\d{14})|(4\d{12}(\d{3})?)|((30[0-5]|36\d|38\d)\d{11})

时间: 2024-08-29 10:35:42

正则表达式常见例题的相关文章

正則表達式常见例题

常见例题 例1:北美地区的电话号 编码方案:电话号码有一个3位数的区号和一位7位数的号码组成(这个7位数有分成  一个3位的局号和一个4位的路号.局号和路号之间使用连字符分隔) 每位电话号码能够是随意数字,可是区号和局号的第一位数字不能是0或1.实际书写号码是往往会把区号写在括号中面,或者将区号使用连字符和后面的局号连接起来.比如:(555)123-1234或555-123-1234,有时候在括号你里面会包括空格.比如:(555 )123-1234 文本: J.Doe:248-555-1234

[正则表达式]常见字段的校验

正则表达式可以方便地对数据进行匹配,也可以执行更加复杂的字符串验证. 下面是一些常见字段的校验,总结一下,以后总会用到的. 1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class Validate { 5 //对生日的校验 6 //格式:yyyy-mm-dd 7 public static String isBirthday(String birthday){ 8 String er

《java入门第一季》之正则表达式常见规则

正则表达式规则不用记住,只是知道是做什么用的即可.常见规则如下: A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') (\\n来表示换行) \r 回车符 ('\u000D') B:字符类 [abc] a.b 或 c(简单类) [^abc] 任何字符,除了 a.b 或 c(否定) [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) [0-9] 0到9的字符都包括 C:预定义字符类 . 任何字符.我的就是.字符本身,怎么表

正则表达式常见字符集

用于收藏,内容来源:http://www.jb51.net/article/72867.htm 一.校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 8 正数

java编程基础知识及常见例题

⒈标识符: 只能包含数字.字母.下划线.$,并且不能以数字开头.语义直观规范 驼峰法则: 如:方法名.变量名采用驼峰法则 帕斯卡命名法: 如: 类.接口.枚举采用帕斯卡命名法包名:网址倒写,com.网址名.工程名.包名,,所有字母都小写 ⒉数据类型:⑴基本数据类型---按值传递,传递副本,修改副本不会影响原有数据    ① java里面有8种基本数据类型:int-整型,long-长整型,short-短整型,byte-字节    ②char-字符,float-单精度浮点型,,double-双精度浮

正则表达式常见规则

[]:匹配[]中定义的任意字符: {3,10}:前一个规则最少出现3次,最多出现10次: {3,}:前一个规则最少出现3次,没有上限: {3}:前一个规则只能出现3次,不能多也不能少: |:或者: \u4e00-\\u9fa5:汉字匹配: +:等价于{1,},前一个规则最少出现一次,无上限: *:等价于{0,},前一个规则可以不出现,也可以出现多次: ?:等价于{0,1},前一个规则可以不出现,最多只能出现一次: .:匹配任何字符,使用时要用[]把它括起来: \d:等价于[0-9]匹配数字: \

正则表达式常见形式

表达式 含义 体现的逻辑 [A-Za-z].*[0-9]|[0-9].*[A-Za-z] 同时包含数字和字母 1.要求检索的字符串符合多个条件中的一个, 2.逻辑或 ^(?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9]) 使用大小写组合,并且含有特殊字符 1.要求检索的字符串符合多个条件,逻辑与2.正向预查 ^(?!.*(.)\\1{2,}) 没有重复3次及以上的同一字符 反向预查

正则表达式 常见的简写形式

\d 表示 [0-9].表示一位数字(记忆方式:其英文是 digit 数字). \D 表示 [^0-9].表示除数字外的任意字符. \w 表示 [0-9a-zA-Z_].表示数字.大小写字母和下划线.(记忆方式:w是word的简写,也成单次字符). \W 表示 [^0-9a-zA-Z_].非单词字符. \s 表示 [ \t\v\n\r\f].表示空白符,包括空白符.水平制表符.垂直制表符.换行符.回车符.换页符. \S 表示 [^ \t\v\n\r\f\].非空白符. . 表示 [^\n\r\u

常见例题

'''第一题:去除列表中的重复元素1.列表中的元素有重复,需要去掉重复元素2.要求保留原来的元素顺序3.不需要返回值,直接修改原列表即可''' lt = [3,2,1,8,4,3,4,5,5,6,6,7] def duplicate_removal(lt): lt1 = [] for i in lt: if i not in lt1: lt1.append(i) return lt1 print(duplicate_removal(lt)) '''第二题:计算字符串中所有数字的和1.字符串中只有