我想将一段html代码中的<p>替换成<span>
但有个要求当<p></p>之间的文本不能以$$字符开头和以$$字符结尾,如何写这个正则表达式?
例如:
<p style='...'>lskfjwe中<span color='red'>lsjfklw</span>立刻就放松</p>
替换成
<span style='...'>lskfjwe中<span color='red'>lsjfklw</span>立刻就放松</span>
但是
<p style='...'>$$lskfjwe中<span color='red'>lsjfklw</span>立刻就放松$$</p>
则不替换

解决方案 »

  1.   

    <p>[^\$\$].+[^\$\$]</p> 
    ??
    帮你up
      

  2.   

    <p.*>[^\$\$].+[^\$\$]</p>
    有过度匹配的问题
      

  3.   

    正则
    http://blog.morock.net/blogview.asp?logID=29 
    常用正则
    http://www.regexlib.com/DisplayPatterns.aspx?cattabindex=5&categoryId=5
      

  4.   

    try
    string[] slist = {"<p style='...'>lskfjwe中<span color='red'>lsjfklw</span>立刻就放松</p>",
    "<p style='...'>$$lskfjwe中<span color='red'>lsjfklw</span>立刻就放松$$</p>",
    "<p style='...'>$$lskfjwe中<span color='red'>lsjfklw</span>立刻就放松</p>",
    "<p style='...'>lskfjwe中<span color='red'>lsjfklw</span>立刻就放松$$</p>"
    }; foreach (string s in slist)
      Console.WriteLine(System.Text.RegularExpressions.Regex.Replace(s, @"<p([^>]*?>)(?([$]{2})(?<PREFIX>))([\s\S]*?)(?(?<=[$]{2})(?<POSTFIX>))(?(PREFIX)(?(POSTFIX)(?!)))</p>","<span$1$2</span>", RegexOptions.IgnoreCase));