• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >正则表达式 > 深入理解正则表达式语法知识

深入理解正则表达式语法知识

作者:韩韩韩 字体:[增加 减小] 来源:互联网 时间:2017-05-11

韩韩韩通过本文主要向大家介绍了java正则表达式语法,c++正则表达式语法,正则表达式语法,正则表达式语法大全,js正则表达式语法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

4.选择与分组

(1).分组

字符组[]:表示匹配若干个字符之一

字符组可以浅显的理解为一些字符的组合,字符组与普通字符的区别在于:abc普通字符表示匹配a接下来b接下来c而字符组[abc]表示在同一位置匹配a或者b或者c;由于字符组本身的含义也决定了可以将这个字符组看成是一个普通的特殊字符。

普通性:普通是因为它也表示在一个位置上匹配一个字符对单个字符的操作在其上面也是可以起作用的;如:[a-z]{6};

特殊性:特殊是因为,1.其他字符在其内外的含义可能不同如:-,.,^等,2.在同一个位置可以有多中选择,但这种选择也只是限于一个字符;

各个字符在字符组内外的区别:

-:在字符组内部,表示一个范围;在字符组外仅仅表示是一个字符;

例子:

-在字符组外

<script type="text/javascript">
var str = '2016-8-20';
var reg = /16-8/g;
console.log(str.match(reg)); //16-8
</script>
</div>

-在字符组内

<script type="text/javascript">
var str = '2016-8-20';
reg = /1[6-8]/g;
console.log(str.match(reg)); //16 
</script>
</div>

-在字符组外是一个普通字符只表示-这个字符本身,所以匹配的是1接下来是6接下来是-接下来是8的这段字符串;所以是16-8

-在字符组内表示的是一个范围,所以匹配的是1接下来是6到8之间的任意数字的字符所以是16;

.:在字符组内部表示一个点;在字符组外部表示任意字符(查找单个字符,除了换行和行结束符)。

.在字符组外

<script type="text/javascript">
var str = '2016-8-20';
var reg = /6.8/g;
console.log(str.match(reg)); //6-8
</script>
</div>

.在字符组内

<script type="text/javascript">
var str = '2016-8-20';
var reg = /6[.]8/g;
console.log(str.match(reg)); //null
</script>
</div>

.在字符组外表示任意字符;所以匹配的是6接下来是任意一个字符接下来是8的一个字符串,所以匹配到的是6-8;

.在字符组内只是一个普通字符表示它本身;所以匹配的是6接下来是.接下来是8的一个字符串由于未匹配到所以为null;

对于字符组还可以分为匹配型字符组和排除型字符组主要是因为^的含义的变化

^: 脱字符;

例子:

^在字符组外

<script type="text/javascript">
var str = 'han';
var reg = /^ha/g;
console.log(str.match(reg)); //ha
</script>
</div>

^在字符组内

<script type="text/javascript">
var str = 'han';
var reg = /[^0-9]/g;
console.log(str.match(reg)); // h,a,n
</script>
</div>

脱字符在[]外部是一个锚点,表示匹配以某某字符开头的字符或者字符串,在[]中有除了的意思

注意:[^a]表示匹配一个位置不等于a的字符,不要去理解成这个位置不是a就能匹配,后者的理解可以匹配一个空行,注意这个区别

例子:

<script type="text/javascript">
var str = 'han';
var reg = /n[^q]/g;
console.log(str.match(reg)); //null
</script>
</div>

注意:这个例子在n之后没有任何字符,所以匹配的结果为空,如果按照上述的第二种理解可能就会认为匹配结果是:n

[]中不管有多少字符,在同一个位置只会匹配到其中的任意一个,如果说我要在一个位置上匹配一个字符串那又该如何呢?

(2).选择

此时可以用()加|这个组合,|在正则表达式中是或者的意思,而()在正则表达式中划分一个范围;单独的()使用时没有意义的,只有当它和其他量词共同使用才会体现出它的作用(先说下浅显的例子,贪婪匹配和非贪婪匹配再单独去说,这里先不作说明);

例子:

<script type="text/javascript">
var str = '2016-8-20';
var reg = /(16-8)/g;
console.log(str.match(reg)); //16-8
</script>
<script type="text/javascript">
var str = '2016-8-20';
var reg = /16-8/g;
console.log(str.match(reg)); //16-8
</script>
</div>

这个例子有没有括号都一样都表示匹配16-8这个字符串

当()和|一起使用则是一种多选结构,可以匹配任意子表达式()表示的是一个范围;|表示的是一个选择方向

例子:

<script type="text/javascript">
var str = 'greygray';
var reg = /gr[ea]y/g;
console.log(str.match(reg)); // grey,gray
reg = /gr(e|a)y/g;
console.log(str.match(reg)); //grey,gray
</script>
</div>

以上这两种匹配的结果都是grey, gray也就是说(|)的分支选择结构在一定程度上是可以和[]进行互相替代

例子:

<script type="text/javascript">
var str = 'greygray';
var reg = /gre|ay|yg/g;
console.log(str.match(reg)); //gre,yg,ay
</script>
</div>

输出结果:gre,yg,ay

括号的添加与否对结果的影响很大如:

^hello | world | hi :匹配的是 ^hello 或者 world 或者 hi

^(hello | world | hi):.匹配的起始行是 ^hello 或者 ^world 或者 ^ hi

注意:多选结构虽然有时候可以用字符组来表示,他俩之间可以互相表示,但是一个字符组只能匹配目标文本中的单个字符,而每个多选结构自身都可能是完整的正则,都可以匹配任意长度的文本

在正则表达式中需要注意的几点:

1.在正则表达式中,空格字符也被视作一个规则字符;

2.-;.;*等在[]内和[]外的含义并不相同注意区别;注意元字符在字符组内外的区别;

3.当对几个字符添加[]之后该字符串就被视作一个字符组,而对单个字符操作的?*等也可以对其使用,量词之间的混合使用和量词与分组选择之间的混合会有一个贪婪和非贪婪匹配的概念,对此会单独拿出总结;

4.分支结构和字符组的区别;分支可以匹配任意长度的文本;字符组只能匹配一个字符;

5.注意一些概念的理解:比如:[^x]表示‘匹配一个不等于x的字符'而不是'只有当这个位置不是x才能匹配';[^x]后面的概念可以匹配一个空行在比如{x,y},?,*的理解;

6.在匹配中决定匹配是否成功的是{x,y}中的x,x对匹配成功与否起关键作用。

以上所述是小编给大家带来了深入理解正则表达式语法知识的全部叙述,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,再此页非常感谢大家对网站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java 正则表达式匹配模式(贪婪型、勉强型、占有型)
  • Java使用正则表达式对注册页面进行验证功能实现
  • 深入理解正则表达式语法知识
  • java正则表达式四种常用的处理方式(匹配、分割、替代、获取)
  • java常用正则表达式
  • Java正则表达式提取字符的方法实例
  • Java中使用正则表达式处理文本数据
  • Java用正则表达式如何读取网页内容
  • Java正则表达式过滤出字母、数字和中文
  • Java正则表达式入门基础篇(新手必看)

相关文章

  • 2017-05-11去html代码的正则 推荐
  • 2017-05-11验证注册用户名必须为字母
  • 2017-05-11让URL只允许一些字符的正则表达式
  • 2017-05-11php正则表达式匹配img中任意属性的方法
  • 2017-05-11匹配中文汉字的正则表达式介绍
  • 2017-05-1115/18位身份证号码验证的正则表达式总结(详细版)
  • 2017-05-11论坛UBB代码 推荐
  • 2017-05-11php正则表达式的模式修正符和逆向引用使用介绍
  • 2017-05-11正则表达式(regex)错误使用导致功能漏洞分析
  • 2017-05-11正则表达式验证

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 可以少写1000行代码的正则表达式
    • javascript正则表达式基础篇
    • 用js实现过滤script的正则
    • PHP 正则表达式的几则使用技巧
    • 最新版网址替换正则表达式
    • ORACLE数据库中怎么求除数字、字母之外的非中文字符的正则表达式
    • 常用的JQuery数字类型验证正则表达式整理
    • 用JavaScript实现全局替换,解决$等特殊符号的难题[
    • UBB代码在论坛中的应用
    • javascript中使用正则表达式实现删除字符串中的前后空格

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有