正则表达式的理解和使用

 一、什么是正则表达式

   正则表达式是一种特殊的字符串模式,用于匹配一组字符串,可以检查一个串是否含有某个子串、将匹配的子串替或者从某个子串中提取符合某个条件的子串。就类似按图索骥,按照给定的某种规则去寻找并匹配目标。

  1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。

 

二、正则表达式的介绍

  正则表达式是由普通字符(如a-z,0-9,标点符号等)以及特殊字符(成为“元字符”)组成的文字模式。其表达式以双斜杠'//'包含正则匹配描述信息来表示,如:/^[0-9]+abc$/。

1、字符语义介绍。

  #普通字符:没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

 

  #非打印字符:

    \cx  x知名的控制字符,如\cM即为Control-M    \f  换页符

    \n  换行符                   \r  回车符

    \s  任何空白字符,等价于[ \f\n\r\\tv]        \S  任何非空白字符,等价于[^ \f\n\r\\tv]

    \t  制表符                     \v  垂直制表符

  

  #特殊字符:(使用反斜杠'\'进行转义后使用)

    ^:开始标记                    $:结束标记

    ():子表达式的开始与结束位置,子表达式可供以后使用。

    *:子表达式出现n次,n>=0              +:子表达式m次,m>=1

    ?:子表达式出现0或1次               .:匹配换行符之外的单个字符。

    []:中括号表达式,用于匹配取值范围,如[0-9]:取数范围0到9;[a-z]:取值范围a-z的字母。

    {}:字符长度,如{3-15}:3-15个字符长度。

    \:特殊字符转义符                  |:两项间的选择。

  

  #限定符:

    *:匹配子表达式n次,n>=0              +:匹配子表达式m次,m>=1

    ?:匹配子表达式0或1次                {n}:匹配n次,n为非负整数

    {n,}:至少匹配n次                   {n,m}:匹配至少n次,至多m次。

 

  #定位符:【不能将限定符与定位符一起使用】

    ^:字符串开始的位置                  $:字符串结束的位置

    \b:单词的边界                     \B:非单词的边界

 

  #元字符:

    ?:当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。如对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

     (pattern):匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。

    (?:pattern):匹配 pattern 但不获取匹配结果。

    (?=pattern):正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。

    (?!pattern):正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。

    (?<=pattern):反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。

    (?<!pattern):反向否定预查,与正向否定预查类似,只是方向相反。

    x|y:匹配x或y

    [xyz]:匹配xyz的字符

    [^xyz]:匹配xyz以外的字符

    [a-z]:a-z范围的任意字符

    [^a-z]:a-z以外的任意字符

    \d:匹配一个数字,等价于[0-9]

    \D:匹配一个非数字,等价于[^0-9]

    \w:匹配字母、数字、下划线,等价于'[A-Za-z0-9_]'

    \W:匹配非字母、数字、下划线,等价于 '[^A-Za-z0-9_]'

    \num:匹配一个正整数。

 

2、运算符优先级(下表优先级依次递减)

  运算符            描述      

   \              转移符

  (), (?:), (?=), []         圆括号和方括号

  *, +, ?, {n}, {n,}, {n,m}      限定符

  ^, $, \任何元字符、任何字符   定位点和序列(即:位置和顺序)

   |              替换,"或"操作

 

3、匹配规则

  基本模式匹配:

  字符簇:

  确定重复出现:

 

参考文献:(文章仅做交流学习,侵权即删!!)

1、https://www.runoob.com/regexp/regexp-tutorial.html

猜你喜欢

转载自www.cnblogs.com/vikezhu/p/6667473.html