第一个正则的,有这样一个字符串<td><a href="xxxxxxx">hello</a><td>,我想取得其中hello字符串,这个比较简单。但是其中的<a></a>标签不一定存在,也可能是<td>hello</td>能不能用一个正则表达式把两种情况的的hello都能取出来,也就是如何让<a href=".*?">这个表达式可有可无。
另外就策略模式中,context类到底有什么作用?在不结合工厂模式的时候,策略的选择还是在客户端。而 context只是维护一个策略接口对象,为什么不直接在客户端用这个策略接口来调用方法?

解决方案 »

  1.   

    string sToMatch = @"<td> <a href=""xxxxxxx"">hello </a> <td>";
    string sRegString = @"> *(?<Content>[\S\p{Z}]+) *<";
    System.Text.Regulation.Regex reT = new System.Text.Regulation.Regex(sRegString);
    System.Text.Regulation.Match match = reT.Match(sToMatch);
    System.Console.WriteLine(match.Group["Content"].value);输出:
    hello
      

  2.   

    (?<= <td>)[^<]*(?=<\/td>) 
    环境(Context)角色持有一个抽象策略(Strategy)角色的引用
    在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象。本身没有解除客户端需要选择判断的压力,而策略模式与简单工厂模式结合后,选择具体实现的职责也可以由Context来承担,这就最大化的减轻了客户端的压力
      

  3.   

    try...(?<=<td>\s*(?:<a[^>]*>)?)hello(?=\s*(?:</a>)?\s*</td>)
      

  4.   

    正则的自己已经搞定了。
    2楼说的我知道,如果不结合工厂模式,感觉环境(Context)意义不大,和直接使用基类差不多。