正则表达式介绍及常见用法

正则表达式(Regular Expression),又称正规表示法、常规表示法,在实际的软件开发项目中经常会被使用到。它使用单个字符串来描述、匹配并获取一系列符合某个句法规则的结果。

我将从最基础的部分为大家写这个正则表达式教程

正则表达式起源

 

1956年,数学家Stephen Kleene在Warren McCulloch和Walter Pitts早期神经系统工作的基础上,设计出了一个数学符号体系——regular sets(规则的集合),这个东西很快被计算机科学家用于编译器的扫描或词法分析。由于正则表达式强大的文本处理能力,很快被应用到Unix的工具软件grep中;此后,正则表达式被广泛应用于Unix系操作系统、Perl、PHP,Delphi、JAVAScript、C#(.NET)、JAVA、Python、Ruby等语言和开发环境中。

正则表达式定义

 

正则表达式是用来描述字符串特定结构(规则)的语言,由相关引擎执行。正则表达式形象化的描述如图1所示。

图1 正则表达式形象化的描述

正则表达式作用

 

1.数据验证

测试输入的字符串,是否符合一定的规则,是否允许输入等。例如,可对Email地址合法性、网址、电话号码、出生年月等进行验证。

2.操作文本

用来识别文档中的特定文本、完全删除该文本或者用其它文本或字符替换。

3.提取子字符串

基于模式匹配,可以查找文档内或输入域内特定的文本,在涉及替换操作时往往都需要先提取。

正则表达式基本语法

 

1.直接量字符(通常是不可见的字符及匹配自身的字符)

2.字符类(可以匹配多种字符)

3.重复

4.选择、分组和锚字符

5. 标志(标示引擎的工作模式)

说明:

在正则表达式前用“(?i)”标示,例如:(?i)^root$,则root、Root、ROOT都符合要求。

6.其它

1) 匹配元字符“( [ { \ ^ $ | ) ? * + .”,需要用“\”转义。

例如:匹配“.”,正则表达式为“\.”。

2) 贪婪量词与惰性量词

惰性量词仅仅在贪婪量词后面加个“?”。

用贪婪量词进行匹配时,它首先会将整个字符串当成一个匹配,如果匹配成功就退出,如果不匹配,就截去最后一个字符进行匹配;如果不匹配,继续将最后一个字符截去进行匹配,直到有字符匹配为止。

用惰性量词进行匹配时,它首先将第一个字符当成一个匹配,如果成功则退出;如果失败,则测试前两个字符,依次增加,直到遇到合适的匹配为止 。

例如:“\d+”是贪婪量词,而“\d+?”是非贪婪(惰性)量词。

3) 子匹配

内部的分组匹配,用“()”标示一个分组。

子匹配的每个分组都被放在一个特殊的地方以备将来使用,这些被存储的值是分组中的特殊值,称之为反向引用。

例如:验证输入的是日期,再提取到月份,其正则表达式为“^\d{4}\-(\d{2})\-\d{2}$”。

4) 正向前瞻和负向前瞻

正向前瞻:(?<=字符)或(?=字符)

注意:一定要有等于才行。

负向前瞻:(?<!字符)或(?!字符)

注意:一定要有不等于才行。

也就是说,我们可以自己制定匹配的边界在哪里,这在字符串提取时常用。

示例:

例1,我们取“#”之前的字符,但是不包括“#”,其正则表达式:[\w]+(?=#)

例2,我们取不在“#”之前的字符,但是不包括“#”,其正则表达式: [\w]+(?!#)

例3,我们取“<>”之间的字符,但是不包括“<>”,其正则表达式: (?<=<)[\w]+(?=>)

正则表达式常见用法

 

1.数字

1)正整数: ^[1-9][0-9]*$

2)非正整数: ^((-[1-9][0-9]*)|(0))$

3)负整数:^-[1-9][0-9]*$

4)整数: ^(0|-?[1-9][0-9]*)$

5)非负浮点数:^\d+(\.\d+)?$

2.字母

1)英文字符串:^[A-Za-z]+$

2)英文大写串:^[A-Z]+$

3)英文小写串:^[a-z]+$

4)英文字符数字串:^[A-Za-z0-9]+$

5)英文数字加下划线串:^\w+$

3.其它

1.E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

2.URL:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’:+!]*([^<>\"\"])*$

3.邮政编码:^[1-9]\d{5}$

4.中文:^[\u4e00-\u9fA5]+$

5.电话号码:^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

6.手机号码:^1\d{10}$

7.首尾空格:(^\s+)|(\s+$)

8.身份证:^(\d{15}|\d{18})$      (注:中国的身份证为15位或18位)

9.账号:^[a-zA-Z]\w{4,15}$      (注:字母开头,允许5-16字节,允许字母数字下划线)

10.IP:^([1-9]\d{0,1}|1\d{2}|2[0-4]\d|25[0-5])(\.([1-9]\d{0,1}|1\d{2}|2[0-4]\d|25[0-5])){3}$   (IP是由大于等于0且小于等于255的数字、“.”组成的,验证每个数字分项再和“.”拼接就可以了)

总结

 

正则表达式的功能非常的强大,大家在实际使用到的时候才能够感觉得到。当然,要想同时记住这么多的正则表达式的规则,也不是简单的事情。大家可以将常见的正则表达式记录下来(就像本文一样),待需要用到的时候可以拿出来参考。

原文来自:C博客/Programmer_Zhou的专栏

时间: 2024-08-05 15:04:51

正则表达式介绍及常见用法的相关文章

正则表达式介绍

1 正则表达式介绍 在JavaScript中,正则表达式是一个用来 匹配 的 并包含 元字符或普通字符 的字符串对象. 在JavaScript中,正则表达式是对象. 使用正则表达式的目的:提高效率 1.1 正则表达式的作用 1 匹配 2 提取 3 替换 1.2 识别正则表达式 "123" "abc" "just do IT" 1.3 元字符 在正则表达式中具有特殊意义的专用字符 符号 含义 基本元字符   . 匹配除换行符外的任意单个字符 (x)

sscanf的常见用法

例子: 1. 常见用法. char buf[512] = ; sscanf("123456 ", "%s", buf); printf("%s\n", buf); 结果为:123456 2. 取指定长度的字符串.如在下例中,取最大长度为4字节的字符串. sscanf("123456 ", "%4s", buf); printf("%s\n", buf); 结果为:1234 3. 取到指定

【ORM】关于Dapper的一些常见用法

引言 Dapper是.Net平台下一款小巧玲珑的开源Orm框架,简单实用的同时保持高性能,非常适合我这种喜欢手写SQL的人使用,下面介绍一下如何使用Dapper. 相关资料 Dapper的GitHub地址是dapper-dot-net,上面有一些用法和性能的介绍,有兴趣者可以上去看看. 数据库设计和实体类     简单设计两个表,分别为部门表,雇员表. CREATE TABLE [dbo].[T_Dept] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Dept]

走入asp.net mvc不归路:[6]linq常见用法

asp.net mvc结合linq,先不说性能问题,对于增删查改的操作还是相当方便的.以下我们就来介绍一下linq在asp.net mvc的Controller中的常见用法. 1 首先来看看整个数据表,共有3个表,要访问这个数据库,得有一个代理,这个代理就是edmx文件中继承类DbContext的AllTestEntities 2 实体代理,可以直接在Controller中声明,并且数据库中对应的表,可以无缝对接:使用时,声明一个变量db,然后使用时,要访问相应表或视图,可以直接使用db.Dom

nmap软件使用思路及常见用法

一.扫描思路 二.常见用法 1.使用nslookup 解析出域名的IP地址 2.使用 nmap -sL 查询该IP网段中包含的ip地址(不检测存活状态,仅列表) 3.使用nmap -sn 查询网段中关注主机或者整个网段的IP存活状态 nmap -sn nmap针对局域网和广域网(会根据源目的是否在同一网段进行判断)有两种不同的扫描方式 当目标主机与源主机不在同一网段时: Nmap会发送四种不同类型的数据包来探测目标主机是否在线. 1)  ICMP echo request 2)  a TCP S

iOS开发多线程篇—GCD的常见用法

iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 (2)使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispat

cURL的常见用法有哪些?

本文和大家分享的主要是linux中cURL的常见用法相关内容,一起来看看吧,希望对大家 学习linux 有所帮助.  1. 获取页面内容  当我们不加任何选项使用 curl 时,默认会获取链接的内容到标准输出.  curl http://www.codebelief.com  2. 显示 HTTP 头  如果我们只想要显示 HTTP 头,而不显示文件内容,可以使用 -I 选项:  curl -I http://www.codebelief.com  输出为:  HTTP/1.1 200 OK 

iOS开发多线程篇 08 —GCD的常见用法

iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 (2)使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispat

Linux中grep的常见用法总结

grep是linux中文本编辑类的命令,用于选取所需要的文本内容 主要格式: grep [option] "PATTERN" FILENAME option: -i 忽略大小写 -o 只显示匹配到的字符 -v 反向显示(显示没有匹配到的行) --color 用颜色标注显示匹配到的字符 "PATTERN":支持REGEXP(正则表达式) 1.字符匹配: .  :匹配一个字符 [] :字符匹配区间 例如:[a-z] [^]:字符匹配反向区间 例如:[^a-z] 2.字符