zoukankan      html  css  js  c++  java
  • 正则表达式匹配html及汉字

    正则表达式匹配Html标签

    查找所有的TD区域(最短):
    <td\s*.*>\s*.*<\/td>

    查找所有的TR:
    <tr.*(?=>)(.|\n)*?</tr>

    查找所有的TD:
    <td.*(?=>)(.|\n)*?</td>

    正则表达式匹配Html标签

    例1.
    以下是一段Html代码
    <table boder="0" width="11%" class="somestory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>
    <table border="0" width="11%" class="headline">
    <tr>
    <td width="100%">
    <p align="center">典经HTML正则表达式!</p>
    </td>
    </tr>
    </table>
    <table boder="0" width="11%" class="someotherstory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>

    正则表过式:<table.*(?=headline)
    说明:正则表达式匹配表格开始标记,能够返回开始标记直至 “headline”之间的所有内容(换行除外);
    就是以上红色标示出来的部分。
    原理:
    <table                           //匹配的开始部分
    .*                                   //除换行外的所有字符
    (?=headline)               //零宽度正预测先行断言,匹配以 headline 结尾的单词的前面部分(除了 headline 以外的部分)


    例2.
    <table boder="0" width="11%" class="somestory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>
    <table border="0" width="11%" class="headline">
    <tr>
    <td width="100%">
    <p align="center">典经HTML正则表达式!</p>
    </td>
    </tr>
    </table>
    <table boder="0" width="11%" class="someotherstory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>

    正则表达式:<table.*(?=headline)(.|\n)*?</table>
    说明:匹配最长的以 <table border="0" width="11%" class=" 开始, 以</table>结束的字符串,就是以上以红色标示出来的

    部分。

    原理:
    <table.*(?=headline)                  //参见记录1的说明
    (.|\n)                                             //指示在两个或多个项之间进行选择,(zlf)ood 与 "zood" 或 "food" 匹配
    *?                                                //应与上一个 (.|\n) 联合起来看,  .*? 就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复,懒惰模式。
    </table>                                     //匹配的结束标记

    注意:“(.|\n)”后面的 "*" 匹配 0 个到多个任意字符,而“?”使得“*”匹配范围最小化,即在找到表达式的下一部分之前匹配尽可能少的字符。</table> 是表格的结束标记.

    例3.
    <tableboder="0" width="11%" class="somestory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>
    <tableborder="0" width="11%" class="headline">
    <tr>
    <td width="100%">
    <p align="center">典经HTML正则表达式!</p>
    </td>
    </tr>
    </table>
    <tableboder="0" width="11%" class="someotherstory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>

    正则表达式:<(?<tag>[^\s>]+)[^>]*>(.|\n)*?</\k<tag>>
    说明:匹配成对的HTML标签,它将会匹配Html标签及标签中的内容,本例分三段匹配三个<table>标签及</table>中的内容。
    原理:
                                       //html标签中的 <
    (?<tag>[^\s>]+)            // (?<name>), 分组命名的方式,[^\s>]:非任何空白字符及“>”至少匹配一次
    [^>]*>                            //非“>”匹配 0 到 n 次,及html的标签“>”.
    (.|\n)                              //在两个或多个项之间时行选择,(zlf)ood 与 "zood" 或 "food" 匹配.
    *?                                  // 应与上一个(.|\n)联合起来看, .*? 就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复,懒惰模式。
    </\k<tag>>                    //反向引用命名的组,语法为 \k<name>, 及html 标签“>”

    注意:“(.|\n)”后面的 "*" 匹配 0 个到多个任意字符,而“?”使得“*”匹配范围最小化,即在找到表达式的下一部分之前匹配尽可能少的字符。
    本例使用了分组命名及反向引用命名组的概念。

    正则表达匹配中文
    匹配中文字符的正则表达式:   [\u4e00-\u9fa5]
    1、先用js把中文转换16进制码:d.innerHTML = escape("你们"); 得到 %u4F60%u4EEC, 即 \u4F60\u4EEC

    2、var arr = str.match(/\u4F60\u4EEC/g); 

    3、\u4F60为单个汉字“你”.

    4、以上测试程序为javascript

  • 相关阅读:
    OnEraseBkgnd、OnPaint与画面重绘
    .编译ADO类DLL时报错的解决方案
    VC列表框样式
    Codeforces 131D. Subway 寻找环树的最短路径
    Codeforces 103B. Cthulhu 寻找奈亚子
    Codeforces 246D. Colorful Graph
    Codeforces 278C. Learning Languages 图的遍历
    Codeforces 217A. Ice Skating 搜索
    Codeforces 107A. Dorm Water Supply 搜图
    Codeforces 263 D. Cycle in Graph 环
  • 原文地址:https://www.cnblogs.com/shubuqi/p/3035018.html
Copyright © 2011-2022 走看看