正则表达式

1、概念:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。换句话说,正则表达式就是记录文本规则的代码。

 

正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本

正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。

 

1)、元字符
元字符就是指那些在正则表达式中具有特殊意义的专用字符。可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

 

.       匹配除换行符以外的任意字符
\w    匹配字母或数字或下划线或汉字
\s     匹配任意的空白符,匹配任意的空白符(包括空格、制表符(Tab)、换行符、中文全角空格等)
\d     匹配数字
\b     匹配单词的开始或结束
^      匹配字符串的开始
$      匹配字符串的结束

*      代表的不是字符,也不是位置,而是数量。它指定*前边的内容可以连续重复使用任意次(可能是0次)以使整个表达式得到匹配

.*     匹配任意数量的不包含换行的字符

+     匹配重复1次或更多次

 

2)、字符转义
\        取消字符的特殊意义

 

3)、重复

限定符,即指定数量的代码

*        重复零次或更多次
+       重复一次或更多次
?       重复零次或一次
{n}     重复n次
{n,}    重复n次或更多次
{n,m}    重复n到m次

 

4)、分枝条件
分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用 | 把不同的规则分隔开,但要注意各个条件的顺序

 

5)、分组(子表达式)
重复多个字符,可以用小括号 () 来指定分组。
默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

 

常用分组语法

捕获
(exp)        匹配exp,并捕获文本到自动命名的组里
(?<name>exp)      匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)       匹配exp,不捕获匹配的文本,也不给此分组分配组号


零宽断言
(?=exp)      匹配exp前面的位置
(?<=exp)    匹配exp后面的位置
(?!exp)       匹配后面跟的不是exp的位置
(?<!exp)     匹配前面不是exp的位置


注释
(?#注释内容)     这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

 

6)反义
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

 

7)、后向引用
用于重复搜索前面某个分组匹配的文本

 

8)、零宽断言
只有当断言为真时才会继续进行匹配
零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西

(?=exp)     也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp
(?<=exp)    也叫零宽度正回顾后发断言

 

9)、负向零宽断言

 

10)、注释
(?#注释内容)

 

11)、贪婪与懒惰
贪婪匹配:匹配尽可能多的字符
懒惰匹配:匹配尽可能少的字符。

正则表达式默认贪婪匹配,由贪婪匹配转化为懒惰匹配在后面加上一个问号 ?

 

懒惰限定符
*?     重复任意次,但尽可能少重复
+?     重复1次或更多次,但尽可能少重复
??      重复0次或1次,但尽可能少重复
{n,m}?     重复n到m次,但尽可能少重复
{n,}?      重复n次以上,但尽可能少重复

 

12)、平衡组/递归匹配

 

posted @ 2018-06-04 20:18  字符编码  阅读(289)  评论(0编辑  收藏  举报