小弟一直对正则不感冒,看了好久也还是不会,特来请教各位表达式是这样的
1.判断是否是一个html标记 如:<html> <html body="g"> </html>等
规则:<标记> <标记 属性="">(标记和属性之间有一个空格,属性可以是多个) </标记>2取得一个标记名 如:<html> <html body="g"> </html>等
规则:<标记>得到“标记” <标记 属性="">(标记和属性之间有一个空格,属性可以是多个,用空格隔开)得到“标记”3取得一个属性名列表 如:<html body="g" tag="t">
规则:<标记 属性="" 属性2="">得到(属性|属性2)3根据属性名取得一个属性的值 如:<html body="g" tag="t">
规则:<标记 属性="x" 属性2="y">根据“属性”得到“x”4根据一个标记对取得它们之间的内容(其中包含两种类型的值:一个不含有标记,一个含有标记) 如:
<html>
test body
...
</html><html body="g">
test body
...
</html>规则:
<html>
test body
...
</html>
(得到:
1:test body
...2:<html>
test body
...
</html>
)<html body="g">
test body
...
</html>
(得到:
1:test body
...2:<html body="g">
test body
...
</html>
)
好了就是这些了 有点多,呵呵

解决方案 »

  1.   

    html标签是否会有嵌套的情况?即:
    <html><head></head></html>这种情况
      

  2.   

    1、
    //如果判断其中是否包含这一规则的字符串
    if(Regex.IsMatch(yourStr, @"^\s*<([^>]+)>\s*<\S+\s(?:[^=]+=""[^""]*""\s*)*>\s*</\1>\s*$", RegexOptions.IgnoreCase))
    {
        richTextBox2.Text += "符合要求";
    }
    //如果判断整个字符串是否符合这样的规则
    if(Regex.IsMatch(yourStr, @"^\s*<([^>]+)>\s*<\S+\s(?:[^=]+=""[^""]*""\s*)*>\s*</\1>\s*$", RegexOptions.IgnoreCase))
    {
        richTextBox2.Text += "符合要求";
    }
      

  3.   

    2、
    同时取一个还是多个
    //取一个
    Match m = Regex.Match(yourStr, @"(?<=<)[^/>\s]+(?=[^>]*>)");
    if (m.Success)
    {
        richTextBox2.Text += m.Value;
    }
    //取多个
    MatchCollection mc = Regex.Matches(yourStr, @"(?<=<)[^/>\s]+(?=[^>]*>)");
    foreach(Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }
      

  4.   

    3.1、
    MatchCollection mc = Regex.Matches(yourStr, @"[^\s=]+(?==""[^""]*"")");
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }
    3.2、
    string tag = Regex.Escape(textBox1.Text);
    Regex reg = new Regex(@"(?<=" + tag + @"="")[^""]*(?="")", RegexOptions.IgnoreCase);
    Match m = reg.Match(yourStr);
    if (m.Success)
    {
        richTextBox2.Text += m.Value;
    }
      

  5.   

    4、
    Match m = Regex.Match(yourStr, @"<([a-z]+)[^>]*>((?>(?<o>)<\1[^>]*>|(?<-o>)</\1>|(?!</?\1).)*(?(o)(?!)))</\1>", RegexOptions.IgnoreCase|RegexOptions.Singleline);
    if (m.Success)
    {
        richTextBox2.Text += m.Groups[2].Value + "\n\n";  //不带标签
        richTextBox2.Text += m.Value + "\n\n";            //带标签
    }
    相关讨论参考下面这个帖子
    这类嵌套正则如何写?通过id属性获得一个标签块
      

  6.   

    授人以鱼,不如授人以渔,推荐工具Regulator.exe,无论学正则还是调试正则都是个好工具,至于找的话,GOOGLE吧