zoukankan      html  css  js  c++  java
  • 正则表达式的正反向预编译

    资料见前一贴
    比如有 <table id="table1"><tr><td><a href=www.csdn.net title="CSDN"></a></td></tr></table>
    用正则表达式匹配获得<a href="www.csdn.net" title="CSDN"></a>

    如果你网页当中的格式是固定的
    <table id="table1" > 
    <tr>
    <td><a href="www.csdn.net" title="CSDN"></a></td  >
    </tr>
    </table>
    这样就可以实现
    (?<=<table (.*?>)\n*<tr>\n*<td>)(?:.|\n)*?(?=</td>\n*</tr>\n*</table>)

    注意实际使用时其中的转义字符。

    可以这样拼接一个正则表达式:
    string start = @"<table(.*?>)\n*<tr>\n*<td>";
    string end = @"</td>\n*</tr>\n*</Table>";
    string regExp = @"(?<=" + start + ")" + "(?:.|\n)*?" + "(?=" + end + ")";
    string result = System.Text.RegularExpressions.Regex.Match(@"<table id= runat=server><tr><td>symbolsnhame</td></tr></Table>", regExp).Value;
    MessageBox.Show(result);


    总结出一个通用匹配表达式
    string regExp = "(? <=" + "开头标志" + ")" + "(?:. |\n)*?" + "(?=" + "结束标志" + ")";

    我们再为其扩展一下,因为有时<tr ><td>都会有这种标签<td class="NavLeftCell">当我们遇上这种问题时将不能匹配到想要的字符串,不过我们只需要进行一些简单的扩展就可以实现匹配.

    string start = @"<table(.*?>)\n*<tr(.*?>)[\n]*<td(.*?>)";
    string end = @"</td>\n*</tr>\n*</Table>";



    技术资料:
    反向预搜索:"(?<=xxxxx)","(?<!xxxxx)"

        这两种格式的概念和正向预搜索是类似的,反向预搜索要求的条件是:所在缝隙的 "左侧",两种格式分别要求必须能够匹配和必须不能够匹配指定表达式,而不是去判断右侧。与 "正向预搜索" 一样的是:它们都是对所在缝隙的一种附加条件,本身都不匹配任何字符。

        举例5:表达式 "(?<=\d{4})\d+(?=\d{4})" 在匹配 "1234567890123456" 时,将匹配除了前4个数字和后4个数字之外的中间8个数字。由于 JScript.RegExp 不支持反向预搜索,因此,本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索,比如:Java 1.4 以上的 java.util.regex 包,.NET 中

    括号 "( )" 内的子表达式,如果希望匹配结果不进行记录供以后使用,可以使用 "(?:xxxxx)" 格式

        举例1:表达式 "(?:(\w)\1)+" 匹配 "a bbccdd efg" 时,结果是 "bbccdd"。括号 "(?:)" 范围的匹配结果不进行记录,因此 "(\w)" 使用 "\1" 来引用。(在\1匹配到时才进行记录?:后面括号的内容).






  • 相关阅读:
    随时查询
    插入图片后R文件变红,报错“Error::app:mergeDebugResources'. > Some file crunching failed, see logs for detail”
    android 布局
    用SVN导入android项目时候没有导入default.properties这文件的解决方法
    Button的点击事件可以在XML文件中设置
    设置全屏有两种方式
    android 中加入的音乐文件有的时候没有播放。
    android spinner 调用xml里的数据
    刚刚申请了个博客发发感想
    .Net下WinForm换肤控件整理(转)
  • 原文地址:https://www.cnblogs.com/symbol441/p/912081.html
Copyright © 2011-2022 走看看