开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

浅谈正则表达式

简介: 原文:浅谈正则表达式 一、什么是正则表达式? 简单的说:正则表达式(Regular Expression)是一种处理字符串匹配的语言; 正则表达式描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串,对匹配到的子串进行“取出”或“替换”操作。
+关注继续查看
原文:浅谈正则表达式

一、什么是正则表达式?

简单的说:正则表达式(Regular Expression)是一种处理字符串匹配的语言;

正则表达式描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串,对匹配到的子串进行“取出”或“替换”操作。

二、正则表达式的应用

正则表达式在实际的开发过程中非常实用,能够快速解决一些复杂的字符串处理问题,下面我对正则表达式的应用做一些简单分类:

第一种:数据验证

比如,你要验证一个字符串是否是正确的EMail,Telphone,Ip等等,那么采用正则表达式就好非常方便。

第二种:内容查找

比如,你要抓取一个网页的图片,那么你肯定要找到<img>标签,这时候用正则表达式就可以精准的匹配到。

第三种:内容替换

比如,你要把手机号码中间四位隐藏掉变成这种模式,123****4567,那么采用正则表达式也会非常方便。

三、正则表达式有哪些内容

下面我将简单的介绍一下正则表达式:

1、 正则表达式的几个重要的概念

  • 子表达式:在正则表达式中,如果使用"()"括起来的内容,称之为“子表达式”
  • 捕获:子表达式匹配到的结果会被系统放在缓冲区中,这个过程,我们称之为“捕获”
  • 反向引用:我们使用"\n",其中n是数字,表示引用之前某个缓冲区之间的内容,我们称之为“反向引用”

2、数量限定符

  • X+     表示:1或多个
  • X*     表示:0或多个
  • X?     表示:0或1个
  • X{n}    表示: n个
  • X{n,}    表示:至少n个
  • X{n,m}   表示:n至m个,贪婪原则,会尽可能匹配多个;如果在后面加个?,则为非贪婪原则

注:X表示要查找的字符

3、 字符限定符

  • \d   表示:匹配一个数字字符,[0-9]
  • \D  表示:匹配一个非数字字符,[^0-9]
  • \w  表示:匹配包括下划线在内的单词字符,[0-9a-zA-Z_]
  • \W  表示:匹配任何非单词字符,[^0-9a-zA-Z_]
  • \s  表示:匹配任何空白字符,空格、回车、制表符
  • \S  表示:匹配任何非空白字符
  • .    表示:匹配任何单个字符

此外还有以下几种:

范围字符:[a-z]、[A-Z]、[0-9]、[0-9a-z]、[0-9a-zA-Z]
任意字符:[abcd]、[1234]
非在内的字符:[^a-z]、[^0-9]、[^abcd]

4、 定位符

  • ^  表示:开头标识
  • $  表示:结尾标识
  • \b   表示:单词边界
  • \B  表示:非单词边界

5、转义符

  • \   用于匹配某些特殊字符

6、选择匹配符

  • |   可以匹配多个规则

7、特殊用法

  • (?=) : 正向预查:匹配以指定内容结束的字符串
  • (?!) : 负向预查:匹配不是以指定内容结束的字符串
  • (?:) : 不把选择匹配符的内容放到缓冲区

四、正则表达式在Javascript下的使用方法

在Javascript下使用正则表达式,有两种方法:

第一种方法:使用RegExp类

提供的方法有:

  • test(str): 在字符串匹配是否有匹配模式的字符串,返回true/false
  • exec(str): 返回匹配模式匹配到的字符串,如果有,返回相应的字符串,无,返回null;

        //如果正则表达式中有子表达式,使用exec方法时

        //返回的是:result[0] = 匹配结果 , result[1] = 子表达式1的匹配结果 ……

第二种方法是:使用String类

提供的方法有:

  • search : 返回匹配模式的字符串出现的位置,如果没有,返回-1
  • match : 返回匹配模式匹配到的字符串,如果有,返回数组,无,返回null
  • replace : 将匹配模式匹配到的字符串进行替换
  • split : 将字符串已匹配模式为分隔符进行字符串分隔,返回数组

五、正则表达式在PHP下的使用方法

PHP下有两种使用正则表达式的函数:

第一种是:Perl正则表达式函数

提供的方法有:

  • preg_grep --  返回与模式匹配的数组单元
  • preg_match_all -- 进行全局正则表达式匹配
  • preg_match -- 进行正则表达式匹配
  • preg_quote -- 转义正则表达式字符
  • preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换
  • preg_replace -- 执行正则表达式的搜索和替换
  • preg_split -- 用正则表达式分割字符串

第二种是:POSIX正则表达式函数

提供的方法有:

  • ereg_replace -- 替换正则表达式
  • ereg -- 正则表达式匹配
  • eregi_replace -- 不区分大小写替换正则表达式
  • eregi -- 不区分大小写的正则表达式匹配
  • split -- 用正则表达式将字符串分割到数组中
  • spliti --  用正则表达式不区分大小写将字符串分割到数组中
  • sql_regcase --  产生用于不区分大小的匹配的正则表达式  

六、总结

正则表达式就是我们实现某个功能的一个工具,这个工具:

1、功能强大

正则表达式中各种限定符的不同组合会实现不同的功能,有时实现一个复杂的功能需要编写很长的正则表达式,如何能精准匹配,这就要考验一个程序员的能力了。

2、简洁方便

平常我们在进行字符串内容查找,只能进行某个特定字符串的查找,但是正则表达式可以帮助我们进行模糊查找,更快更方便,仅仅需要一个正则表达式串。

3、各种语言基本上都支持

目前如JAVA、PHP、Javascript、C#、C++等主流语言都支持正则表达式。

4、学习很简单,应用很高深

学习正则表达式很快也很简单,但是如何在实际开发中编写出高效地,精准地正则表达式,还是需要长时间的尝试和积累。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【小技巧】正则表达式
正则表达式小技巧 1 空行替换 ^\r\n
228 0
浅谈正则表达式的使用
在开发中,正则表达式的使用场景是多种多样的,同时也能够支持各种复杂场景,同时,正则表达式也是支持许多种语言,对于字符串的截取,匹配,替换 有着巨大的作用。
0 0
😝 这次一定 | "学废" 正则表达式 🙋‍♂️(中)
正则表达式 → 没有一个开发仔会对这个词陌生吧?没印象的话,想想你是如何 判断身份证、手机号码是否合法的 ?Tips:本节代码示例基于Python的re库编写,虽大部分编程语言的正则库都是师从 Perl语言,语法基本一样,但也可能略有差异~
0 0
第63天:正则表达式
第63天:正则表达式
0 0
常用正则表达式大全
1. 用户名正则表达式模式 ^[a-z0-9_-]{3,15}$ ^ # 行开始 [a-z0-9_-] # 匹配列表中的字符,a-z,0–9,下划线,连字符 {3,15} ...
695 0
看了之后,你会觉得简单的正则表达式
昨天看《JSP网络编程》——电子工业出版社,看到了里面有一页是讲正则表达式的,心想我上学期学了《编译原理》应该难不到我吧,的确,我很快就看完了,但还是有很些地方不是很清楚,模凌两可的,今天我决定花点时间彻底把基础的弄明白,也好给大家一个经验。
753 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载