正则表达式

本文介绍了正则表达式的概念、基本用法,如简单的匹配、贪婪与懒惰匹配,元字符、限定符及应用实例。还讲解了元字符、字符转义和常用替换规则。通过RegexBuddy工具演示了如何使用正则表达式进行文本匹配和替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式:又称规则表达式,英文名为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 onload="AutoResizeImage(200,200,this)"src="/Document/Title/Temp/2017-12-114bc5.png" >

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

               <img onload="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\d{2}[)-]?\d{8} 

            

                     1.5反义

               代码/语法 说明

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

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

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

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

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

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

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

          

                     1.6替换 |

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

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

               正则表达式:\(0\d{2}[)]\d{8}|0\d{2}[- ]?\d{8}

              

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

               \d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。

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

               如果你把它改成\d{5}|\d{5}-\d{4}的话,

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

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

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

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

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

          

            1.7分组语法

               零宽断言

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

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

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

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

            

          

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值