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>结尾
正则表达式的书写得视具体情况而定,此处只是一点思路,算不得答案。