正则表达式实例总结-------最短匹配

PERL:

 

设定要从一个字符串中查找到最短匹配:
比如: 字符串为 "<Font color=red>红色字<font color=blue>蓝色字</font>红色字结束</font>"
现在要查找到以真正匹配的 font 标记对,就需要用最短匹配,
即为找到: <font color=blue>蓝色字</font>

 

思路,匹配HTML标签。tag中的字符可以任意,但不可以是<或>,如果存在<或>,则<>必须是在""或''内部。如<input name="<">,按此匹配要求我们得到如下正则表达式:

<                         #开始尖括号"<"

  (                        #任意数量的

     "[^"]*"             #双引号字符串

       |                   #或者是

      '[^']*'              #单引号字符串

       |                   #或者是

       [^<>]         #除去尖括号、单引号、双引号之外的其它文本 《精通正则表达式》200页写的是 [^'>"],我觉得中括号里排除的字  

                            符中应该包括<,这样可以排除嵌套的情况。是否排除一个'或"视具体情况而定,如果严格按语法要求,是应该排除。

 )*

>                          #结束尖括号

 

按此思路得到针对上述问题的正则表达式。

<font('[^']*'|"[^"]*"|[^<>])*>                     #<font开头,此处同上述思路中介绍的HTML标签匹配

((?!<font('[^']*'|"[^"]*"|[^'"<>])*>).)*?      #排除环视,只有当不存在<front***>时才能成功。点号代表任意字符。

<//font>                                                        #</font>结尾

 

正则表达式的书写得视具体情况而定,此处只是一点思路,算不得答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值