正则表达式之字符串模式匹配实例详解

目录
  • 前言
  • 什么是正则表达式
  • 字符范围匹配
  • 元字符
  • 多次重复匹配
  • 定位匹配
  • 贪婪模式与非贪婪模式
  • 表达式分组
  • 结语

前言

今天我们来学习正则表达式,正则表达式的应用十分广泛,几乎每个涉及到交互的项目都会用到的,学会正则表达式之后会让你除了提高效率外,会给你带来绝对的成就感。

接下来我们正式开始!

什么是正则表达式

正则表达式是检查、匹配字符串的表达式

正则表达式用来描述某种规则,同时它不是某种语言专有的技术,它对主流的语言都有良好的支持。

正则表达式的主要使用场景是:字符串检验,查找与替换。

示例:检查输入身份证号是否合法的正则表达式

正则表达式:(^\d{18}$)|(^\d{17}(\d|X|x)$)

现在你也许看不懂,但是等看完这篇博客之后在加以练习你就能轻松写出来了。

字符范围匹配

下面这个表是对单个字符约束的一些正则表达式:

正则表达式 说明
A 精准匹配单个字符
x|y 允许出现的2个字符
[xyz] 字符集合,允许出现的2个字符
[a-z] 字符集合
[^xyz] 集合内字符不允许出现

例如:匹配数字范围(0570-0579)

正则表达式为:057[0-9]

元字符

用于匹配的特殊符号又称作元字符

常用的元字符如下:

正则表达式 说明
\d 匹配任意单个数字
\D 匹配\d规则以外的任意单个字符
\w 匹配任意单个数字字母下划线
\W 匹配\w规则以外的任意单个字符
\s 匹配单个空格
\n 匹配单个换行符
. 匹配任意单个字符(换行符除外)
\. 特殊字符只匹配.

示例:请匹配杭州与宁波座机号码(0571|0574-XXXXXXXX)

正则表达式为:057[14]-\d\d\d\d\d\d\d\d

多次重复匹配

当我们匹配的字符串比较长,比如身份证号有18为一个一个写\d比较麻烦,多次重复匹配只能简化我们的操作。

常用的多次重复匹配如下:

正则表达式 说明
A{N} 精准N次匹配
A{N,} 最少出现N次
\d{N,M} 最少可以出现N次,最多可以出现M次
\d* 可以出现零次至无限次
\d+ 最少出现一次,相当于{1,}
\d? 最多出现1次,相当于{0,1}

示例:匹配全国的座机号(区号3或4位-电话号码7或8位)

正则表达式:\d{3,4}-\d{7,8}

定位匹配

正则表达式 说明
^A.* 头匹配-以字符A开头
.*A$ 尾匹配-以字符A结尾
^A.*A$ 全字匹配-以字符A开头结尾

示例:以C开头,B结尾的字符串

正则表达式:^C.*B$

贪婪模式与非贪婪模式

贪婪模式:在满足条件的情况下尽可能多匹配到字符串
非贪婪模式:在满足条件的情况下尽可能少匹配到字符串

正则表达式在默认的情况下就是贪婪模式

示例:输入123456

  • 在使用正则表达式\d{4,5},之后匹配到的是12345,可见这就是贪婪模式。
  • 在使用正则表达式\d{4,5}?,之后匹配到的是1234,可见这就是非贪婪模式。

可见,只需要在正则表达式的后面加一个?,就可以从贪婪模式变换到非贪婪模式。

表达式分组

分组就是将正则分组为多个子表达式。

示例:abababcdcdcd

正则表达式:(ab){3}(cd){3}

示例:检查输入身份证号是否合法的正则表达式

正则表达式:(^\d{18}$)|(^\d{17}(\d|X|x)$)

结合JavaScript练习正则表达式

在JS中定义正则表达式对象只需要在//之间书写正则表达式即可

我们实现用表单来验证输入姓名和身份证号是否合法。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="#" method="post" id ="frmInfo">
		<div id="err" style="color:red">

		</div>
		<div>
			姓名:<input id="name" name="name"/>
		</div>
		<div>
			身份证:<input id ="idno" name="idno"/>
		</div>
		<div>
			<input type = "submit"/>
		</div>
	</form>
	<script type="text/javascript">
		document.getElementById("frmInfo").onsubmit = function(){
			//汉字范围\u4e00-\u9fa5
			var regex1 = /^[\u4e00-\u9fa5]{2,8}$/;
			var regex2 = /^[1234568]\d{16}[0-9xX]$/;
			var name = document.getElementById("name").value;
			var idno = document.getElementById("idno").value;
			//利用正则表达式进行匹配,true-匹配,false-失败
			if(regex1.test(name) == false){
				document.getElementById("err").innerHTML = "无效姓名";
				return false;
			}else if(regex2.test(idno) == false){
				document.getElementById("err").innerHTML = "无效身份证号";
				return false;
			}else{
				alert("验证通过,准备提交!");
				return true;
			}
		}
	</script>
</body>
</html>

输出:

结语

多加练习之后,书写起来还是比较简单的。而且很有成就感。加油!

到此这篇关于正则表达式之字符串模式匹配的文章就介绍到这了,更多相关正则表达式字符串模式匹配内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 正则表达式模式匹配字符串基础知识

     介绍 在实际项目中有个功能的实现需要解析一些特定模式的字符串.而在已有的代码库中,在已实现的部分功能中,都是使用检测特定的字符,使用这种方法的缺点是: 逻辑上很容易出错 很容易漏掉对一些边界条件的检查 代码复杂难以理解.维护 性能差 看到代码库中有一个cpp,整个cpp两千多行代码,有个方法里,光解析字符串的就有400余行!一个个字符对比过去,真是不堪入目.而且上面很多注释都已经过期,很多代码的书写风格也各不相同,基本可以判断是过了很多人手的. 在这种情况下,基本没办法还沿着这条老路走下去,自

  • 正则表达式匹配不包含某些字符串的技巧

    经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤"hede"字串,但这种写法是错误的.我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含'h','e','d'三个但字符.那什么样的正则表达式能过滤出不包含完整"hello"字串的信息呢? 事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确.就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问

  • 使用正则表达式匹配[***]样式的字符串

    源码如下: 复制代码 代码如下: - (NSUInteger)analyseRX:(NSString *)string withPatternString:(NSString *)patternString{    //     \\[[^\\]]+\\]  用以匹配字符串中所出现的 [*] 的个数    //     <[^>]+>        用以匹配字符串中所出现的 <*> 的个数 if (string == nil)    {        return 0;   

  • 正则表达式之字符串模式匹配实例详解

    目录 前言 什么是正则表达式 字符范围匹配 元字符 多次重复匹配 定位匹配 贪婪模式与非贪婪模式 表达式分组 结语 前言 今天我们来学习正则表达式,正则表达式的应用十分广泛,几乎每个涉及到交互的项目都会用到的,学会正则表达式之后会让你除了提高效率外,会给你带来绝对的成就感. 接下来我们正式开始! 什么是正则表达式 正则表达式是检查.匹配字符串的表达式 正则表达式用来描述某种规则,同时它不是某种语言专有的技术,它对主流的语言都有良好的支持. 正则表达式的主要使用场景是:字符串检验,查找与替换. 示

  • Python字符串处理实例详解

    Python字符串处理实例详解 一.拆分含有多种分隔符的字符串 1.如何拆分含有多种分隔符的字符串 问题: 我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符,例如: s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" 其中;,|,\t 都是分隔符号,如何处理? 方法一: 连续使用str.split()方法,每次处理一种分隔符号 s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz&q

  • IOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解 在实际的开发需求时,有时候我们需要对某些对象进行打包,最后拼接到参数中 例如,我们把所有的参数字典打包为一个 字符串拼接到参数中 思路:利用系统系统JSON序列化类即可,NSData作为中间桥梁 //1.字典转换为字符串(JSON格式),利用 NSData作为桥梁; NSDictionary *dic = @{@"name":@"Lisi",@"sex":@"m",@"tel&qu

  • python里使用正则表达式的组嵌套实例详解

    python里使用正则表达式的组嵌套实例详解 由于组本身是一个完整的正则表达式,所以可以将组嵌套在其他组中,以构建更复杂的表达式.下面的例子,就是进行组嵌套的例子: #python 3.6 #蔡军生 #http://blog.csdn.net/caimouse/article/details/51749579 # import re def test_patterns(text, patterns): """Given source text and a list of pa

  • Scala解析Json字符串的实例详解

    Scala解析Json字符串的实例详解 1. 添加相应依赖 Json解析工具使用的 json-smart,曾经对比过Java的fastjson.gson.Scala的json4s.lift-json.其中 json-smart 解析速度是最快的. <dependency> <groupId>net.minidev</groupId> <artifactId>json-smart</artifactId> <version>2.3<

  • C++/C 回文字符串的实例详解

    C++/C回文字符串的实例详解 判断输入的字符串是不是回文字符串,正反读一样. .C版 #include<stdio.h> int main() { char he[100]; char a; int i=0,flag=1; while((a=getchar())!='\n') { he[i]=a; i++; } int n=i; for(i=0;i<n/2;i++) { printf("%c\t%c\n",he[i],he[n-1-i]); if(he[i]!=he

  • C++ 中String 替换指定字符串的实例详解

    C++ 中String 替换指定字符串的实例详解 C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事. 首先明白一个概念,即string替换所有字符串,将"12212"这个字符串的所有"12"都替换成"21",结果是什么? 可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现, 代码如

  • Java整数和字符串相互转化实例详解

    这篇文章主要介绍了Java整数和字符串相互转化实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.把int转化为String 以下三种方式把整形地i转化为字符串s,当然把Double.Float.Long转化为字符串操作一样. 1.String s=""+i; 2.String s=Integer.toString(i); 3.String s=String.valueOf(i); 2.把String转化为int型. 1.in

  • Golang基础教程之字符串string实例详解

    目录 1. string的定义 2.string不可变 3.使用string给另一个string赋值 4.string重新赋值 补充:字符串拼接 总结 1. string的定义 Golang中的string的定义在reflect包下的value.go中,定义如下: StringHeader 是字符串的运行时表示,其中包含了两个字段,分别是指向数据数组的指针和数组的长度. // StringHeader is the runtime representation of a string. // I

  • Java正则表达式之Pattern类实例详解

    目录 前言 Pattern 概述 Pattern 匹配模式(Pattern flags) 代码示例 多行模式:Pattern.MULTILINE 示例 忽略大小写:Pattern.CASE_INSENSITIVE 示例 启用注释:Pattern.COMMENTS 示例 启用 dotall 模式:Pattern.DOTALL 示例 平白字符模式 模式:Pattern.LITERAL 示例 附:贪婪匹配与懒惰匹配 总结 前言 这个系列的文章我们使用以下的顺序进行讲解: Pattern 详解: Mat

随机推荐