正则表达式简述

1.正则表达式介绍

正则表达式就是一个字符串 按照一种规则定义的,其目的是为了在另外的字符串中查找、替换、... 、符合指定模式的子字符串 或段落。如果没有配合正则函数使用,那么它就是一个普通字符串,毫无意义。

2.正则表达式的语法

正则语法中包含
1.原子(打印或非打印字符 如a-z 或 \r\n) 、
2.元字符(修饰原子的特殊字符)
3.模式修正符(增强表达式语句的)

语法:/原子和元字符/模式修正符

2.1 原子介绍

原子是正则语句的基本组成部分,是真正起到匹配作用的单元。所以一个正则语句中至少要包含这个基本单元。原子可以是任意的打印和非打印字符(打印字符如 字母 数字 标点... 非打印字符如 \f\r\n),对于特殊字符要配合‘’转义,使特殊字符去掉其特殊意义 只保留字面意思。
1.那些需要进行转义

特殊字符 .  *  +  ( )  $  /  \  ?  [  ]  ^  {  }    

2.一些表示范围的元子

"\d"   表示任意一个十进制数字             同 [0-9]
"\D"   表示任意一个非十进制数字字符       同 [^0-9]
"\s"   表示任意一个空白                   同 [\n\r\t\f]
"\S"   表示任意一个非空白                 同 [^\n\r\t\f]
"\w"   表示任意一个字  (数字 字母 下划线) 同 [0-9a-zA-Z_]
"\W"   表示任意一个非字  非(数字 字母 下划线)   同 [^0-9a-zA-Z_]
自定义  表示中括号里任意字符           如 [abc][^abc][a-d] (使用中横线一定要由小到大排列)

2.2原字符介绍

1.元字符是一种特殊的字符(包含限定符),是用来修饰原子的不可单独使用,在原子后面声明即可

如: \d* (*)表示一个十进制数可重复出现任意次数的 字符序列。 end$ ($)表示以end结尾。

元字符集

"*"  表示当前的原子可以出现任意次(0次到多次)。

"+"   表示当前的原子可以出现至少1次(1次到多次)。

"?"   表示当前的原子可以出现最多1次(0次或1次)。

"."   表示除换行符意外的任意字符

"|"   表示或者的意思

"{n}" 表示前面的原子应该出现的个数  {n,m}n到m次{n,}n到多次

"()"  2.3模式单元(重点)

"\b"  表示一个边界

"\B"  表示一个非边界

"^"   表示以什么字符开头

"$"   表示以什么字符结尾

2.正则中的贪婪匹配和非贪婪匹配

例如:用 /ab.*c/ 匹配字符串"abcabc" 来说明问题

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配.如上面实例将会匹配到 abcabc 全部的字符串(贪得无厌)

非贪婪匹配:就是匹配到结果就好,'/ab.*?c/'将匹配最少的字符,结果匹配到 abc。

正则中默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。取消贪婪匹配还有一下几种方式

*?       重复任意次 尽可能的少重复(最常用)

+?       重复1次或多次尽可能的少重复

??       重复0次或一次尽可能少重复

{n,m}?   重复n到m次尽可能少重复

3.正则中的模式单元(捕获分组)

我们可以把多个元子及原字符由小括号包裹起来,形成一个大的元子,大名叫做分组。

例如:\d{4}-(\d{2})-\1 可以匹配2016-12-12 其中12就是一个模式单元

括号的作用:

1.改变优先级          可以使内部形成一个整体 作为大元子使用

2.反向引用            \1 表示前面第一个括号括起来的内容 如:上边例子\1 引用了括号中匹配到的内容 所以也是12

3.作为大原子          “/(abc){2}/”  其中 (abc)是一个大原子 匹配 abcabc

4.取消模式单元        (?:模式)只作为一个整体或是改变优先级不能被引用或输出

反向引用实例

字符串 "abcdefj"

模式 /([ab])/ 匹配到了a那么作为括起来的内容可以被反向引用,这时我们这样写模式 /([ab])\1/ 该语句所表达的意思是 我不管第一个匹配的是a还是b反正作为\1表示跟第一个保持一致 第一个是a那么\1表示的就是a,第一个是b \1表示的也是b 这样匹配的结果不是aa就是bb,所以再匹配字符串就失败了。

需要注意的是 如果正则外围使用双引号的话 反向引用时使用两个反斜杠 如\1 进行转义

4.模式修正符

模式修正符是对整个正则表达式调优作用的,是正则的表达扩展是可选的。如是否忽略大小写 是否忽略模式中的空白等。

常用模式修正符

“i”   表示和模式进行匹配时忽略大小写

“m”   默认情况将字符串视为一行

“s”   元字符中的 (.) 点可以被视作换行符

“x”   模式中的空白忽略不计

“a”   同^ 表示以什么开头

“z”   同$ 表示以什么结尾

“U”   表示取消贪婪模式(建议使用*?代替本参数)

“u”   模式字符串被认为是utf-8字符

举例说明:

“/hello tom/i” 模式修正符指定了i 所以匹配字符串 “HELLO TOM” 也是可以的

3正向反向预查

1.正向预查

辅助条件 在查找内容的右边

1.1正向匹配

我们要查找的内容右边必须出现指定的信息,并且其是辅助条件 不作为结果的一部分。

/pattern(?=模式)/ 其中(?= )包裹的是辅助条件(可以通过具体的正则进行设置)

例如: 小写字母字符串右面要出现连续的数字信息

          pattern = "/[a-z]+(?=\d+)/";

          beijing2008 √  shanghai@@@ X

1.2正向不匹配

我们要查找的内容右边不能出现指定内容,右边的内容是辅助信息不作为结果返回。

/pattern(?!模式)/ 其中(?! )包裹的是辅助条件(可以通过具体的正则进行设置)

例如: beijing后面不能出现连续数字

pattern = "/[a-z](?!\d+)/";

beijing2008 X  shanghai@@@ √

2反向预查

辅助条件在查找内容的左边

2.1 反向匹配

左边必须出现指定的信息

/(?<=模式)pattern/ pattern是匹配内容 左边括号部分是辅助内容不作为结果

2.2 反向不匹配

左边不能出现指定信息

/(?<!模式)pattern/ pattern是匹配内容 左边括号部分是辅助内容不作为结果

转载于:https://www.cnblogs.com/daimajie/p/6891793.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值