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

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>

-在字符组内

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

-在字符组外是一个普通字符只表示-这个字符本身,所以匹配的是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>

.在字符组内

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

.在字符组外表示任意字符;所以匹配的是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>

^在字符组内

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

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

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

例子:

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

注意:这个例子在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>

这个例子有没有括号都一样都表示匹配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>

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

例子:

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

输出结果: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对匹配成功与否起关键作用。

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

(0)

相关推荐

  • js正则表达式基本语法(精粹)

    1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束. 例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等): "of despair$":表示所以以"of despair"结尾的字符串: "^abc$":表示开始和结尾都是"abc"的字符串--呵呵,只有&q

  • javascript中基于replace函数的正则表达式语法

    示例代码如下: var strM = "javascript is a good script language"; //在此我想将字母a替换成字母A alert(strM.replace("a","A")); [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 它只替换了首字母.但如果加上正则表达式结果就不一样了!replace()支持正则表达式,它可以按照正则表达式的规则匹配字符或字符串,然后给予替换! 注意:被替换的部分不用加双引号

  • js 玩转正则表达式之语法高亮

    学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解. 那么我们来分析下两位大神 次碳酸钴 和 Barret Lee 语法高亮实现. 先说 Barret Lee 的这篇 <几个小例子教你如何实现正则表达式highlight高亮> 之前看的时候只觉的神奇,特别是下面那个一步一步分开匹配的例子,更是霸气测漏,不过作者也说了,分开只是为了演示方便,可以很直观的看到这一步匹配了什么,不然一步到位匹配完成,你都不知道发生了什么就处理完毕了.来看下他的正则 复

  • 正则表达式语法规则及在Javascript和C#中的使用方法

    一.正则表达式概念: 在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.许多程序设计语言都支持利用正则表达式进行字符串操作. 二.正则表达式的使用: 正则表达式在ASP.NET中主要是用来对输入的内容进行验证,验证一般分为两种一种是客户端JS验证,另一种是服务器端验证 1.JS对输入内容验证 复制代码 代码如下: function check() {           

  • VBS教程:正则表达式简介 -正则表达式语法

    正则表达式语法一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 这里有一些可能会遇到的正则表达式示例: Visual Basic Scripting EditionVBScript匹配/^\[ \t]*$/"^\[ \t]*$"匹配一个空白行./\d{2}-\d{5}/"\d{2}-\d{5}"验证一个ID

  • C#正则表达式分解和转换IP地址实例(C#正则表达式大全 c#正则表达式语法)

    只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n}$". 只能输入至少n位的数字:"^\d{n,}$". 只能输入m~n位的数字:."^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$". 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$". 只能输入有1~3位小数的正实数:"^[0-9]+(.[0

  • PowerShell常用正则表达式和语法参考

    本文介绍PowerShell中的正则表达式,各种不同的字符代表不同的含义,包括占位符PlaceHolder.量词Quantifier和边界字符. 下面列举PowerShell的正则表达式中可能出现的字符,以及它们表示的含义. 字符串的匹配符(占位符PlaceHolder) . 这是一个点儿,表示换行符之外的任意一个字符(Any character except newline (Equivalent: [^\n])) [^abc] 指定的字符(abc)之外的任意一个字符,可以把abc换成其它字符

  • php正则表达式的基本语法总结

    首先,让我们看看两个特别的字符:'^' 和 '$' 他们是分别用来匹配字符串的开始和结束,一下分别举例说明 "^The": 匹配以 "The"开头的字符串; "of despair$": 匹配以 "of despair" 结尾的字符串; "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配 "notice": 匹配包含notice的字符串 你可以看见如果你

  • 正则表达式基本语法详解

    正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符").模式描述在搜索文本时要匹配的一个或多个字符串. 1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束.例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等): "of despair$":表示所以以&q

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

    4.选择与分组 (1).分组 字符组[]:表示匹配若干个字符之一 字符组可以浅显的理解为一些字符的组合,字符组与普通字符的区别在于:abc普通字符表示匹配a接下来b接下来c而字符组[abc]表示在同一位置匹配a或者b或者c:由于字符组本身的含义也决定了可以将这个字符组看成是一个普通的特殊字符. 普通性:普通是因为它也表示在一个位置上匹配一个字符对单个字符的操作在其上面也是可以起作用的:如:[a-z]{6}; 特殊性:特殊是因为,1.其他字符在其内外的含义可能不同如:-,.,^等,2.在同一个位置

  • php正则表达式基本知识与应用详解【经典教程】

    本文实例讲述了php正则表达式基本知识与应用.分享给大家供大家参考,具体如下: 概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配.替换.截取匹配的字符串.常用的语言基本上都有正则表达式,如JavaScript.Java等.其实,只有了解一种语言的正则使用,其他语言的正则使用起来,就相对简单些.文本主要围绕解决下面问题展开. ① 有哪些常用的转义字符 ② 什么是限定符与定位符 ③ 什么是单词定位符 ④ 特殊字符有哪些 ⑤ 什么是逆向引用以及怎样使用逆向引用 ⑥ 匹配

  • UNIX/LINUX SHELL 正则表达式语法详解附使用方法

    几乎所有重要问题都需要从无用数据中过滤出有用数据.了解大量的 UNIX? 命令行实用工具如何使用正则表达式 来去芜取精. 非常奇怪,直到今天我仍然能重复周六早上的经典歌曲"Conjunction Junction".这是好事(看了太多电视)还是坏事(也许是我现在职业的先兆)仍然有待讨论.不管怎样,这首小调在欢快的节奏下传递了基本的信息. 我还没有为学习 UNIX 构想出与"Conjunction Junction"相似的作品,但是我会在未来的几个月里尝试亲手编写这样

  • python 正则表达式语法学习笔记

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. 本文重点给大家介绍python 正则

  • javascript中正则表达式语法详解

    好久都没有写博客了,主要是太懒了,尤其是在阳春三月,风和日丽的日子,太阳暖暖的照在身上,真想美美的睡上一觉.就导致了这篇博客拖到现在才开始动笔,javascript的正则这一块也不是什么新的东西,主要是以前本人一遇到写正则的需求就开始头大,头疼,网上剽窃,东拼西凑,反正就是各种不适应,所以我打算系统的把正则表达式看一遍,一来是自己有所提升,这一块知识点的查漏补缺,二来是给大家分享一下.好了,下面我们直接进入主题: 正则是匹配字符串特定模式的一种表达式,官方是这样说的,但我的理解不外乎就是匹配字符

  • SQL查询语法知识梳理总结

    目录 基本查询 条件查询 常用的条件表达式 投影查询 排序 分页查询 聚合查询 分组 多表查询 连接查询 小结 基本查询 SELECT * FROM <表名> select也可以用作计算,但不是他的强项,select语句可以用来判断数据库的连接是否有效例如:许多检测工具会执行一条SELECT 1;来测试数据库连接. 条件查询 SELECT * FROM <表名> WHERE <条件表达式> 条件表达式可以用<条件1> AND <条件2>表达满足条

  • Python知识点详解之正则表达式语法

    目录 Python 正则表达式是什么 怎么用 正则表达式语法 re 库基本用法 re.search 函数 re.match 函数 re.findall 函数 re.split 函数 re.finditer 函数 re.sub 函数 re 库其它函数 扩展知识 总结 Python 正则表达式是什么 学习 Python 正则表达式离不开 re 模块,所以本篇博客会配合 re 模块进行编写. re 库是 Python 中处理正则表达式的标准库,本篇博客介绍 re 库的同时,会简单介绍一下正则表达式语法

  • 详解Java正则表达式语法

    分享的Java正则表达式语法和示例如下 1.匹配验证-验证Email是否正确 public static void main(String[] args) { // 要验证的字符串 String str = "service@xsoftlab.net"; // 邮箱验证规则 String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}"; // 编译正则表达式

  • 老生常谈JavaScript 正则表达式语法

    JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); 它接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串. 2.字面量 var pattern = /[bc]at/i; 正则表达式的匹配模式支持三种标志字符串: g:global,全局搜索模式,该模式将被应用于所有字符串,而并非搜索到第一个匹配项就停止搜索: i:ingore case,忽略字母大小写,

随机推荐