正则表达式的入门-1

版权声明:HUGO https://blog.csdn.net/weixin_42078367/article/details/85084501

首先来了解下什么是正则表达式?(what)

           正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

 

           通俗来说,正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。

 

正则表达式的特点是   1.灵活性、逻辑性和功能性非常的强;

                                              2.可以迅速地用极简单的方式达到字符串的复杂控制;

                                              3.对于刚接触的人来说,比较晦涩难懂

 

正则表达式的分类:

                              1.普通字符、

                              2.标准字符、

                              3.特殊字符、

                              4.限定字符(又叫量词)

                              5.定位字符(也叫边界字符)

普通字符

       包括字母[a-zA-Z]、数字[0-9]、下划线[-]、汉字,标点符号:

  • 匹配字母a可以 regex=a
  • 匹配字母b可以 regex=b
  • 匹配字母a或者b可以 regex=a|b,这个正则引入一个特殊字符“|”,专业名称为“或”,你也可以叫它“竖线”,它表示“或”的意思。
  • 匹配字母a或者b或者c可以 regex=a|b|c
  • 匹配字母a或者b或者c或者d可以 regex=a|b|c|d
  • 如果匹配所有26个字母,这种写法明显很二(low)了。

       这里引入两个特殊字符方括号“[ ]”和中划线“-” 。“[ ]”专业名称为“字符集合”,你也可以叫它“方括号”。“-” 表示“范围”,你也可以叫它“到”,regex=[A-Z] 匹配从A到Z26个字母中的任意一个。

举例来说,那么匹配字母a或者b或者c或者d可以 regex=[abcd]。

匹配数字1到8的任意数字可以 regex=[1-8],这样就不会匹配到0与9这2个数字了,如下:

                                                                      

标准字符集合

标准字符集合是能够与“多种普通字符”匹配的简单表达式,比如:\d、\w、\s。

匹配数字0到9的任意数字可以 regex=[0-9] 也可以 regex=\d。

标准字符集要注意区分大小写,大写是相反的意思。

regex=\D,则匹配非数字字符,即不能匹配数字0到9,如下:

                                                                     

常用的标准字符说明 标黄的要熟记。

特殊字符

特殊字符在正则表达式中表示特殊的含义,比如:*,+,?,\,等等。

  • “\”是转义字符,用于匹配特殊字符
  • 匹配反斜杠“\”可以 regex=\\,因为“\”是特殊字符,所以需要在它前边再加一个“\”进行转义
  • 匹配星号“*”,可以 regex=\,因为“\”是特殊字符,所以需要在它前边再加一个“\”进行转义

常用的特殊字符说明 标黄的要熟记。

限定字符

限定字符又叫量词,是用于表示匹配的字符数量的。

  • 匹配任意1位数字可以 regex=\d
  • 匹配任意2位数字可以 regex=\d\d
  • 匹配任意3位数字可以 regex=\d\d\d

匹配任意8位数字,再这么写就有点二了。这里引入用于表示数量限定字符“{n}”。“{n}”,n是一个非负整数,匹配确定的n次。

注意:regex=\d\d{3} 匹配任意4个数字不是6个,量词只对它前面的字符负责, regex=\d\d{3} 匹配的内容如下:

                                                                     

  • 匹配任意8位数字可以 regex=\d{8}
  • 匹配任意8位以上的数字可以 regex=\d{8,}
  • 匹配任意1到8位以上的数字可以 regex=\d{1,8}

                                                            

从上图,我们可以看到 regex=\d{1,8},可以匹配到任意1-8个数字,超过8位数字后,从新开始匹配。

 注意: 匹配次数中的“贪婪模式”与“非贪婪模式”:

正则的匹配默认是贪婪模式,即匹配的字符越多越好,而非贪婪模式是匹配的字符越少越好,在修饰匹配字数的量词后再加上一个问号“?”即可。

那么同样是上面的字符串,regex=\d{1,8}?匹配到什么呢?

                                                            

因为在{1,8}这个量词后面加上了问号“?”,表示非贪婪模式,所以只能匹配到1个数字,即匹配的字符越少越好

 

常用的限定字符说明 标黄的要熟记。

  • 匹配0个或多个字母A可以 regex=A* 或者 regex=A{0,}
  • 匹配至少一个字母A可以 regex=A+ 或者 regex=A{1,}
  • 匹配0个或1字母A可以 regex=A?或者 regex=A{0,1}
  • 匹配至少一个 Hello可以 regex=(Hello)+,匹配的效果如下:

     

 

定位字符

定位字符也叫字符边界,标记匹配的不是字符而是符合某种条件的位置,所以定位字符是“零宽的”。

常用的定位字符:

匹配以 Hello 开头的字符串可以 regex=^Hello

                                                         

匹配以 Hello 结尾的字符串可以 regex=Hello$,如下:

                                                            

 

匹配以H开头以o结尾的任意长度字符串可以regex=^H.*o$,如下:

                                                                  

\b匹配这样一个位置:前面的字符和后面的字符不全是\w。如果在“hello,hello1 helloregex,hello regexhello.”这个字符串里匹配regex=hello\b,匹配到的结果如下:

                                            

分析一下:为什么 hello1 匹配不了“hello\b”这个正则?

首先\b是一个定位字符,它是零宽的,标识一个位置,这个位置的前面和这个位置的后面不能全是\w,即不能全是字母数字和下划线 [A-Za-z0-9_],而hello1的o与1之间的位置前面是o后面是1,前后全是\w,不符合\b匹配的含义,因此hello1不能匹配正则表达式 “hello\b”。

但是 bhello 可以匹配 “hello\b” 这个正则,因为 hello 的结尾的位置,前面是o,后面是空白,所以符合\b匹配的含义,因此 bhello 可以匹配 “hello\b” 这个正则。

以上是最基础的知识,希望可以帮助可以更好地掌握正则表式。

 

 

猜你喜欢

转载自blog.csdn.net/weixin_42078367/article/details/85084501