正则表达式

Posted 牧云的少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式:又称规则表达式,英文名为Regular Expression,

               在代码中常简写为regex、regexp或RE

               正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本

            **/

            //通俗理解:正则表达式是用于进行文本匹配的工具

可以用上的软件(RegexBuddy 4):

该软件打开的样子:

         

 

此软件红色部分部分输入正则表达式,蓝色部分分则是正则表达式要匹配的内容。用于方便快捷的验证正则表达式。

 

            1.0简单的正则表达式

                例:him,history,high,hi 在这个字符串中匹配出hi

                正则表达式:hi

                若要精确的匹配出hi,正则表达式:\\bhi\\b

                \\b是正则表达式规定的一个特殊代码,我们把它叫做元字符,

                单词的开头或结尾,也就是单词的分界处,它只匹配一个位置

例如匹配style:

 

而这个(  .+  )分别是是.  匹配除换行符以外的任意字符,+      重复一次或更多次

Style=”.+(?=”)则也是用于匹配本行style=”后面的内容但匹配到最后的”号则就停下了,

此匹配是贪婪匹配会把里面包括的”号都给匹配。

 

如只是想匹配第一个冒号就停下,则在+后面加个?号让此贪婪匹配变成懒惰匹配,就可以实现

在第一个冒号下停下匹配。

 

    1.8贪婪与懒惰

               贪婪:当正则表达式中包含能接受重复的限定符时

           ,通常的行为是

               (在使整个表达式能得到匹配的前提下)

           匹配尽可能多的字符

               这被称为贪婪匹配。

               懒惰:有时,我们更需要懒惰匹配,

           也就是匹配尽可能少的字符。

               如果将前面给出的限定符转化为懒惰匹配模式,

           只要在它后面加上一个问号?

               表5.懒惰限定符

               *?       重复任意次,但尽可能少重复

               +?       重复1次或更多次,但尽可能少重复

               ??       重复0次或1次,但尽可能少重复

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

               n,?   重复n次以上,但尽可能少重复

               例如上面1.7中的例子:

               <img οnlοad="AutoResizeImage(200,200,this)"src="/Document/Title/Temp/2017-12-114bc5.png" >

               <img οnlοad="AutoResizeImage(200,200,this)"src="/Document/Title/Temp/2017-12-114bc5.png" >

               <img οnlοad="AutoResizeImage(200,200,this)"src="/Document/Title/Temp/2017-12-114bc5.png" >

               上面的正则表达式为:(?<=Document/Title/Temp/).+(?=\\")

                                       onload.+(?=src)

               正确正则匹配法:(?<=Document/Title/Temp/).+?(?=\\")

                                onload.+?(?=src)

          

1.1元字符的讲解

              代码    说明

              .       匹配除换行符以外的任意字符

              \\w      匹配数字或字母或下划线或汉字

              \\s      匹配任意的空白符

              \\d      匹配数字

              \\b      匹配单词的开始或结束

              ^       匹配字符串的开始

              $       匹配字符串的结束

            

               1.2字符转义'\\':如果你想查找元字符本身的话,

                比如你查找.,或者*,就出现了问题:你没法指定它们,

                因为它们会被解释成其它的意思。这时你就必须使用\\来

                取消这些字符的特殊意义。因此,你应该使用\\.和\\*。

                当然,要查找\\本身,你也得用\\\\.

           

                     1.3常用的限定符(重复)

               代码    说明

               *             重复零次或更多次

               +             重复一次或更多次

               ?     重复零次或一次

               n          重复n次

               n,         重复n次或更多次

               n,m 重复n到m次

        

                     1.4问题1:如何匹配下列字符串A-G的大写字符?

                 字符串:A正则表v达r式的“鼻祖”AS或许可一SF直y追FD溯到oS科学家对C

                 人类S神经F系统工S作原t理的E早中期p研究

                 正则表达式:[A-G]

                 \\d 等价于 [0-9]   [指定范围]

                 问题2:写一个正则表达式用于匹配几种格式的电话号码

                        例如(010)88886666,或022-22334455,或02912345678

                 答案:\\(?0\\d2[)-]?\\d8 

            

                     1.5反义

               代码/语法 说明

               \\W     匹配任意不是字母,数字,下划线,汉字的字符

               \\S       匹配任意不是空白符的字符

               \\D       匹配任意非数字的字符

               \\B       匹配不是单词开头或结束的位置

               [^x]    匹配除了x以外的任意字符

               [^aeiou]     匹配除了aeiou这几个字母以外的任意字符

               解释:<a[^>]+>   匹配用尖括号括起来的以a开头的字符串  <adfg>dt>wer

          

                     1.6替换 |

               问题2:写一个正则表达式用于匹配几种格式的电话号码

                      例如(010)88886666,或022-22334455,或02912345678

               正则表达式:\\(0\\d2[)]\\d8|0\\d2[- ]?\\d8

              

               特别说明:使用替换时,顺序是很重要的

               \\d5-\\d4|\\d5这个表达式用于匹配美国的邮政编码。

               美国邮编的规则是5位数字,或者用连字号间隔的9位数字

               如果你把它改成\\d5|\\d5-\\d4的话,

               那么就只会匹配5位的邮编(以及9位邮编的前5位)。

               原因是匹配替换时,将会从左到右地测试每个分枝条件,

               如果满足了某个分枝的话,就不会去管其它的替换条件了。

               Windows98|Windows2000|WindosXP这个例子是为了告诉we

               替换不仅仅能用于两种规则,也能用于更多种规则

          

            1.7分组语法

               零宽断言

               (?=exp)           匹配exp前面的位置

               (?<=exp)        匹配exp后面的位置

               (?!exp)           匹配后面跟的不是exp的位置

               (?<!exp)     匹配前面不是exp的位置

            

          

       

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式学习

正则表达式30分钟入门

如何用正则表达式匹配括号中的内容,不包含括号

怎么用正则表达式匹配小括号里内容(含括号)?

怎么通过正则表达删除含中文的括号部分但保留含英文的括号部分?

js 正则表达式获取小括号内的内容,不含括号