浅谈正则表达式(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、学习很简单,应用很高深
学习正则表达式很快也很简单,但是如何在实际开发中编写出高效地,精准地正则表达式,还是需要长时间的尝试和积累。

如果想快速的入门推荐查看这篇文章:

正则表达式30分钟入门教程

(0)

相关推荐

  • 正则表达式regular expression详述(一)

    正则表达式是regular expression,看来英文比中文要好理解多了,就是检查表达式符不符合规定!!正则表达式有一个功能十分强大而又十分复杂的对象RegExp,在JavaScript1.2 版本以上提供.    下面我们看看有关正则表达式的介绍:    正则表达式对象用来规范一个规范的表达式(也就是表达式符不符合特定的要求,比如是不是Email地址格式等),它具有用来检查给出的字符串是否符合规则的属性和方法.    除此之外,你用RegExp构造器建立的个别正则表达式对象的属性,就已经预

  • 正则表达式基础教程 regular expression第1/2页

    前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感.只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题. 1. 引子  目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子. 正则表达式的使用,可以通过简单的办法来实现强大的功能.为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习

  • 正则表达式Regular Expression (RegExp)详解

    正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE). 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 一.字符类 1.字符类:可以匹配他所包含的任意字符 eg:/[abc]/和字母"a"."b"."c"中的任意一个匹配 2.否定字符类:

  • 正则表达式regular expression详述(二)

    正则表达式详述(二) 以下这些不是正则表达式的新增对象请参阅对应的JavaScript对象的属性    $_属性    参考input    $*属性    参考multiline    $&属性    参考lastMatch    $+属性    参考lastParen    $`属性    参考leftContext    $'属性    参考rightContext     compile方法    在脚本运行期间编译正则表达式对象    属于RegExp的方法     在JavaScri

  • python re正则表达式模块(Regular Expression)

    模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等 复习一下基本的正则表达式吧 .:匹配除了换行符以为的任意单个字符 *:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式 +:匹配位于+之前的一个或者多个字符 |:匹配位于|之前或者之后的字符 ^:匹配行首 $:匹配行尾 ?:匹配位于?之前的零个或者一个字符,不匹配多个字符 \:表示 \ 之后的为转义字符 []:匹配[]之中的任意单个字符,[0-9]表示匹配0到9任意一个数字 ():将位于()之内的的内容当作一个整体 {}:按{}

  • 浅谈正则表达式(Regular Expression)

    一.什么是正则表达式? 简单的说:正则表达式(Regular Expression)是一种处理字符串匹配的语言: 正则表达式描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串,对匹配到的子串进行"取出"或"替换"操作. 二.正则表达式的应用 正则表达式在实际的开发过程中非常实用,能够快速解决一些复杂的字符串处理问题,下面我对正则表达式的应用做一些简单分类: 第一种:数据验证 比如,你要验证一个字符串是否是正确的EMail,Telphone,Ip等等,

  • 浅谈正则表达式 实例入门

    很长时间没看 正则表达式了,碰巧今天用到,温故知新了一把 看书学习吧 50% 的举一反三练习中的原创. 一 javascript正则表达式的基本知识 1 javascript 正则对象创建 和用法 声明javascript 正则表达式 复制代码 代码如下: var reCat = new RegExp("cat"); 你也可以 var reCat = /cat/; //Perl 风格 (推荐) 2 学习最常用的 test exec match search replace split

  • 浅谈正则表达式中的分组和引用实现方法

    问题 在外刊君读者群中看到有人提出这样的一个需求: 把字符串切成连续相同字符的正则怎么写?比如abbcccdddd切成a,bb,ccc,dddd 之前我对正则表达式也是略有研究,想尝试一下.其实我对正则表达式的学习基本完全来源于犀牛书的第10章,真正看懂这一章,我觉得操作正则表达式应该不在话下. 我的答案 先给出我的答案吧: 'abbccddd'.match(/(\w)\1*/g) // ["a", "bb", "cc", "ddd&q

  • php正则表达式(regar expression)

    引言: 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串 的需要.正则表达式就是用于描述这些规则的语法. 例:在判断用户邮件地址格式.手机号码格式或者采集别人网页内容时. php也常常用到正则表达式 php有两个常用的正则表达式函数:preg_match和ereg. 我今天刚看了preg_match.它的具体写法是preg_match(mode,string subject,array matches): 以下是我写的一个example. 复制代码 代码如下: <?php $

  • 浅谈python下含中文字符串正则表达式的编码问题

    前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #coding=utf-8. 这是指定一种编码格式,意味着用该编码存储中文字符(也可以是gbk.gb2312等). 关于测试的几点注意 -------------------------------------------- 注1:代码中有中文,就要在头部指定编码方式,如果用编辑器写代码,还要注意IDE的

  • 浅谈JS正则表达式的RegExp对象和括号的使用

    RegExp对象的创建: 常规的正则表达式的创建可用直接量,即斜杠 "/" 括起来的字符.但在要求参数变化的环境下,RegExp()构造函数是更好的选择: var reg1 = /'\w+'/g; var reg2 = new RegExp('\'\\w+\'','g'); 对比两种创建方式,RegExp中的第一个参数为要创建的正则字符串,一方面注意,因为不是直接量的表示形式,因此不用斜杠" / "括起来了:而是字符串中必须要对引号" ' "和转

随机推荐