正则表达式个人总结(一):正则表达式语法的深入理解第一部分

前言:

正则表达是就是用特殊字符组成的有一定规则的逻辑公式(规则字符串),主要用于对字符串进行过滤操作。

正则表达式的三个功能:

1.快速匹配指定的字符串;

2.替换遵照正则表达式规则的字符串;

3.在目标字符串中筛选指定的子字符串;

正则表达式的语法:

正则表达式是由普通字符(例如:a-z)和元字符(特殊字符)组成的文字模式,正则表达式作为一个模板(规则字符串,将目标字符串与所搜索的字符串进行匹配)

一.创建正则表达式对象

RegExp: regular expression

正则表达式对象的创建类似于数组对象的创建

构建正则表达式对象时使用的构造函数有两个参数:

1.待匹配的字符串模板

2.是匹配的模式,其中三种模式,这三种模式可以组合使用

i:不区分大小写

g:全局查找,整个目标字符串范围内

m:多行查找

(1)var reg = new RegExp(‘abc’);

(2)reg = new RegExp(‘abc‘, ‘g’);

(3)var regExp = /abc/gi;(正则表达式的简写形式,字面量形式双斜杠中包含的就是要被匹配的文字,双斜杠后面就是模式组合,//定界,里面的是规则字符串 )

二.语法详解

1.修饰符

<script type="text/javascript">
  var str = ‘Love me‘;
  var reg = /love/g;
  console.log(reg.test(str));
  // 控制台输出:false
  </script>
<script type="text/javascript">
  var str = ‘Love me‘;
  var reg = /love/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>

注:这里的test方法是正则表达式的一个方法,主要作用是用规则字符串去检索目标字符串,匹配成功则返回ture否则返回false。对于本文的字符串的匹配成功与否本文都将采用此方法。

注:在理解正则表达式的的匹配方式的时候可以这样理解;首先要将目标字符和规定字符看做是一个一个的字符,然后在目标字符串中检索规则字符的第一个l这个字符,如果检索匹配成功,接下来去检所规则字符串中的o是否能和目标字符串上一次匹配 成功的下一个字符匹配成功,成功则继续匹配,否则匹配失败,执行相关操作。

2.元字符

对于这个看后面的描述就大致可以知道意思,在此不做解释。

3.量词

量词:量词规定了匹配成功至少需要的次数下限,以及尝试匹配的次数上限,即量词前字符或者字符数组重复必须满足的次数下限,及尝试(深刻理解尝试这个概念)重复的上限;在理解量词的时候要学会等价的概念。

先对这些量词进行解释:+,*,?,{x},{x,y},^,$

(1)+

+表示在目标字符串中检索匹配正则表达式中*前的字符或者字符组(字符组概念下面会进行阐述),至少目标字符串中有一个该字符或字符组;

等价于{1,}

例子:

<script type="text/javascript">
  var str = ‘211211111‘;
  var reg = /1+/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>

(2)*

*表示在目标字符串中检索匹配正则表达式中*前的字符或者字符组,匹配尽可能多的次数,一次也没匹配成功也无所谓;

等价于{0,}

例子:

<script type="text/javascript">
  var str = ‘211211111‘;
  var reg = /1*/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>
<script type="text/javascript">
  var str = ‘211211111‘;
  var reg = /3*/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>

(3)?

?表示在目标字符串中检索匹配正则表达式中*前的字符或者字符组,至少匹配0次,尝试匹配1次,即使匹配1次失败也无所谓;

等价于{0,1}

例子:

<script type="text/javascript">
  var str = ‘211211111‘;
  var reg = /1?/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>
<script type="text/javascript">
  var str = ‘211211111‘;
  var reg = /3?/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>

(4){x}

{x}表示在目标字符串中检索匹配正则表达式中{x}前的字符或者字符组,必须在目标字符串中找到重复x次的该量词前的字符,否则就算匹配失败;

例子:

  <script type="text/javascript">
  var str = ‘211211111‘;
  var reg = /1{7}/gi;
  console.log(reg.test(str));
  // 控制台输出:false
  </script>

(5){x,y}

{x,y}表示在目标字符串中检索匹配正则表达式中{x}前的字符或者字符组,必须在目标字符串中找到量词前重复x次的字符,如果匹配成功,在此基础之上尽可能去尝试找到重复次数为y的字符组成的字符串,如果未匹配到重复次数y次的字符组成的字符串也没关系,退而求其次找到重复y-1次的也可,如果仍未找到,那么继续减少重复次数,但是前提条件是,必须重复x次,因此x是限制能否匹配成功的必须条件

例子:

<script type="text/javascript">
  var str = ‘211211111‘;
  var reg = /1{3,12}/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>

注:这里的12改成更大的数也依旧会返回true

<script type="text/javascript">
  var str = ‘211211111‘;
  var reg = /1{7,12}/gi;
  console.log(reg.test(str));
  // 控制台输出:false
  </script>

(6)^

^表示的就是匹配必须以该量词之后的字符开头的目标字符

<script type="text/javascript">
  var str = ‘love me‘;
  var reg = /^love/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>

(7)$

$表示的就是匹配必须以该量词之前的字符结尾的目标字符

<script type="text/javascript">
  var str = ‘love me‘;
  var reg = /me$/gi;
  console.log(reg.test(str));
  // 控制台输出:ture
  </script>

注:本文表格截屏自W3C的正则表达式的表格。

对于选择,分组等语法在下一部分会详细介绍,以上内容纯属个人总结理解。

时间: 2024-10-18 11:54:17

正则表达式个人总结(一):正则表达式语法的深入理解第一部分的相关文章

Django——正则表达式的举例与基本语法

如果想在URLconf中加入URL和view,只需增加映射URL模式和view功能的Python tuple即可. 这里演示如何添加view中hello功能. from django.conf.urls.defaults import *  from mysite.views import hello   urlpatterns = patterns('',  ('^hello/$', hello), ) Django在检查URL模式前,移除每一个申请的URL开头的斜杠(/). 这意味着我们为/

Python正则表达式:如何使用正则表达式

正则表达式(简称RE)本质上可以看作一个小的.高度专业化的编程语言,在Python中可以通过re模块使用它.使用正则表达式,你需要为想要匹配的字符串集合指定一套规则,字符串集合可以包含英文句子.e-mail地址.TeX命令或者其它任何你希望的字符串.然后您能提这样的问题:"这个字符串匹配这个模式吗?",或者"在这个字符串中存在这个模式的匹配吗?".你也能使用正则表达式修改一个字符串或者分离它. 正则表达式被编译到一系列的字节码,然后被C语言实现的匹配引擎执行.在一些

正则表达式基础及常用正则表达式

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

Java 正则表达式详解_正则表达式

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

关于 Java正则表达式中的Possessive数量修饰词的理解

关于 Java正则表达式中的Possessive数量修饰词的理解 正则表达式对于数量限定符如 ?, + , *, {n, m} 的匹配默认是贪婪模式,比如: a.*b   匹配 acbab 的结果是 acbab 而不是acb 正则表达式支持懒惰模式,也就是在数量限定符后加一个数量修饰词(quantifier),用问号表示, 比如: a.*?b 匹配 acbab 的结果是 acb 而不是acbab 而Java语言在正则表达式中支持一种Possessive 数量修饰词 ,用加号表示.其字面意思是像贪

linux正则表达式之-基础正则表达式(基于grep)

linux正则表达式: 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法,如:假设@代表123456,!代表abcde.通过定义的这些特殊符号的铺助,系统管理员就可以快速的过滤,替换或输出需要的字符. 使用正则表达式注意事项: 1.linux正则一般是以行为单位处理的. 2.alias grep='grep --color=auto',讲课是以grep为例.(注意:为了使下面的案例更加清晰明了,在做下面的案例前请先执行此行命令) 3.注意字符集,LC_ALL=C linux里正则

正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、findall、compile、

re: 介绍:关于正则表达式的模块 正则表达式字符: 匹配*号前的字符0次或多次   意义 例子[#后面代表结果] . .代表匹配一个任意字符,\n除外 ^ ^后面的字符串必须是待匹配字符串的开头,否则找不到 $ $前面的字符串必须是待匹配字符串的结尾,否则找不到 \d 可以匹配一个数字 \D 匹配非数字 \s 可以匹配一个空白字符(空格,缩进符.\n,\r)       可以用+.?.*来选择匹配次数     + 代表匹配前一个字符一次或多次,贪婪的   ? 代表匹配前一个字符0次或1次,不贪

从头认识java-11.4 正则表达式(2)-基本语法

这一章节我们会简要的介绍一下正则表达式的基本语法. 我们的目的不是写出最复杂的表达式,是写出能够完成任务的表达式. 1.字符 字符 意义 \t 制表符 \n 换行 \r 回车 \f 换页 \e 转义 \xhh 十六进制 \uhhhh unicode十六进制 2.字符类 字符类 意义 . 任意字符 [abc] 包含abc的任意字符 [^abc] 不包含abc的任意字符 [a-zA-z] a-z的大小写任意字符 [abc[ijk]] 跟a|b|c|i|j|k的意义相同(并集) [a-z&&[i

正则表达式个人总结(二):正则表达式语法的深入理解第二部分

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