您的位置:首页 > 其它

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

2010-05-26 11:32 387 查看
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>结尾



正则表达式的书写得视具体情况而定,此处只是一点思路,算不得答案。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: