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

来源:互联网 发布:俄罗斯弹道导弹知乎 编辑:程序博客网 时间:2024/05/09 04:30

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>结尾

 

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

原创粉丝点击