当前位置:编程学习 > C#/ASP.NET >>

这样的正则提取怎么写啊

这样的正则提取怎么写啊
<tr>
    <th>53</th>
    <td><a href="http://www.sogou.com/web?query=%D6%D0%B9%FA%B5%E7%D7%D3%B5%D8%CD%BC&w=01020602" target="_blank">中国电子地图</a></td>
    <td><img src="/images/hint_bar.gif" width="12" height="13"></td>
  </tr>
  <tr>
    <th>54</th>
    <td><a href="http://www.sogou.com/web?query=%D6%D0%B9%FA%C2%C1%D2%B5&w=01020602" target="_blank">中国铝业</a></td>
    <td><img src="/images/hint_bar.gif" width="12" height="13"></td>
  </tr>

提取里面的标题:1:中国电子地图,2:中国铝业 --------------------编程问答-------------------- (?si)<a\s+.*?>(?<title>.*?)</a>

捕获组 title 即为所求。 --------------------编程问答-------------------- 关注下。mark --------------------编程问答--------------------  MatchCollection mc = Regex.Matches(input, @"<td>[\s\S]*?target=>.*?>(.*?)</", RegexOptions.IgnoreCase);
用Matches怎么写呢 --------------------编程问答--------------------
using System;
using System.Text.RegularExpressions;

class Program
{    
  static void Main()
  {
    string input = @"
<tr> 
    <th>53 </th> 
    <td> <a href=""http://www.sogou.com/web?query=%D6%D0%B9%FA%B5%E7%D7%D3%B5%D8%CD%BC&w=01020602"" target=""_blank"">中国电子地图 </a> </td> 
    <td> <img src=""/images/hint_bar.gif"" width=""12"" height=""13""> </td> 
  </tr> 
  <tr> 
    <th>54 </th> 
    <td> <a href=""http://www.sogou.com/web?query=%D6%D0%B9%FA%C2%C1%D2%B5&w=01020602"" target=""_blank"">中国铝业 </a> </td> 
    <td> <img src=""/images/hint_bar.gif"" width=""12"" height=""13""> </td> 
  </tr> 
";
    MatchCollection mc = Regex.Matches(input, @"(?si)<a\b+.*?>(?<title>.*?)</a>"); 
    foreach (Match m in mc)
    {
      Console.WriteLine(m.Groups["title"].Value);
    }
  }
}
/* 程序输出:
中国电子地图 
中国铝业 
*/
--------------------编程问答--------------------
    MatchCollection mc = Regex.Matches(input, @"(?si)<a\b.*?>(?<title>.*?)</a>"); 
    foreach (Match m in mc)
    {
      Console.WriteLine(m.Groups["title"].Value);
    }
--------------------编程问答-------------------- (?si)
老大能否解释下这是什么意思啊 --------------------编程问答-------------------- (?s) 相当于 RegexOptions.Singleline, 指定单行模式。更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。
(?i) 相当于 RegexOptions.IgnoreCase ,指定不区分大小写的匹配。

(?si) 就是 (?s)(?i) 的简写。
--------------------编程问答-------------------- 可以使用影响匹配行为的选项修改正则表达式模式。可以通过下列两种基本方法之一设置正则表达式选项:可以在 Regex (pattern, options) 构造函数中的 options 参数中指定,其中 options 是 RegexOptions 枚举值的按位“或”组合;也可以使用内联 (?imnsx-imnsx:) 分组构造或 (?imnsx-imnsx) 其他构造在正则表达式模式内设置它们。

在内联选项构造中,一个选项或一组选项前面的减号 (-) 用于关闭这些选项。例如,内联构造 (?ix-ms) 将打开 IgnoreCase 和 IgnorePatternWhiteSpace 选项而关闭 Multiline 和 Singleline 选项。默认情况下,关闭所有正则表达式选项。

下表列出了 RegexOptions 枚举的成员以及等效的内联选项字符。请注意,选项 RightToLeft 和 Compiled 只适用于表达式整体而不允许内联。(它们只能在 Regex 构造函数的 options 参数中指定。) 选项 None 和 ECMAScript 不允许内联。




RegexOption 成员
 内联字符
 说明
 
None 
 N/A
 指定不设置任何选项。
 
IgnoreCase 
 i 
 指定不区分大小写的匹配。
 
Multiline 
 m 
 指定多行模式。更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结尾匹配。
 
ExplicitCapture 
 n 
 指定唯一有效的捕获是显式命名或编号的 (?<name>…) 形式的组。这允许圆括号充当非捕获组,从而避免了由 (?:…) 导致的语法上的笨拙。
 
Compiled 
 N/A
 指定正则表达式将被编译为程序集。生成该正则表达式的 Microsoft 中间语言 (MSIL) 代码;以较长的启动时间为代价,得到更快的执行速度。
 
Singleline 
 s 
 指定单行模式。更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。
 
IgnorePatternWhitespace 
 x 
 指定从模式中排除非转义空白并启用数字符号 (#) 后面的注释。(有关转义空白字符的列表,请参见字符转义。) 请注意,空白永远不会从字符类中消除。
 
RightToLeft 
 N/A
 指定搜索是从右向左而不是从左向右进行的。具有此选项的正则表达式将移动到起始位置的左边而不是右边。(因此,起始位置应指定为字符串的结尾而不是开头。) 为了避免构造具有无限循环的正则表达式的可能性,此选项不能在中流指定。但是,(?<) 回顾后发构造提供了可用作子表达式的类似替代物。

RightToLeft 只更改搜索方向。它不会反转所搜索的子字符串。预测先行和回顾后发断言不改变:预测先行向右搜索;回顾后发向左搜索。
 
ECMAScript 
 N/A
 指定已为表达式启用了符合 ECMAScript 的行为。此选项仅可与 IgnoreCase 和 Multiline 标志一起使用。将 ECMAScript 同任何其他标志一起使用将导致异常。
 
CultureInvariant 
 N/A
 指定忽略语言中的区域性差异。有关更多信息,请参见在 RegularExpressions 命名空间中执行不区分区域性的操作。
 
--------------------编程问答-------------------- (?<title>.*?)
那这个?做什么用的啊
直接(<title>.*)不可以吗? --------------------编程问答-------------------- i : 大小写.
s:忽略无意义符号:  空格,换行及全角XX
分开看 --------------------编程问答--------------------
引用 9 楼 cteddy 的回复:
(?<title>.*?) 
那这个?做什么用的啊 


(?<name>...) 是表示名字为 name 的命名捕获。 --------------------编程问答--------------------
引用 10 楼 xhbmj 的回复:
i : 大小写. 
s:忽略无意义符号:  空格,换行及全角XX 
分开看


i : 忽略大小写. 

s:忽略无意义符号:  空格,换行及全角XX 
分开看
你这是 x 的解释而不是 s 的。 --------------------编程问答--------------------
引用 11 楼 wuyi8808 的回复:
引用 9 楼 cteddy 的回复:
(? <title>.*?)
那这个?做什么用的啊


(? <name>...) 是表示名字为 name 的命名捕获。

 谢谢老大了啊
 可惜这帖子不是我问的
 学着新的东西了 --------------------编程问答-------------------- 请参考: 

http://msdn.microsoft.com/zh-cn/library/hs600312.aspx 

.NET Framework 开发人员指南 
.NET Framework 正则表达式 

正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合以生成报告。对于处理字符串(例如 HTML 处理、日志文件分析和 HTTP 标头分析)的许多应用程序而言,正则表达式是不可缺少的工具。 

Microsoft .NET Framework 正则表达式并入了其他正则表达式实现的最常见功能,例如在 Perl 和 awk 中提供的那些功能。被设计为与 Perl 5 正则表达式兼容,.NET Framework 正则表达式还包括一些在其他实现中尚未提供的功能,例如从右到左匹配和即时编译。 

.NET Framework 正则表达式类是基类库的一部分,它们可以和面向公共语言运行库的任何语言或工具(包括 ASP.NET 和 Visual Studio 2005)一起使用。 
--------------------编程问答-------------------- --------------------编程问答-------------------- d --------------------编程问答--------------------
引用 15 楼 wuyi8808 的回复:

你在做什么呀
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,