正则表达式匹配多行,混合大小写字符串与C#中的空格

时间:2015-10-23 12:33:17

标签: c# regex

我试图保证CMS中的字段只包含 无序列表。例如,

<ul>
    <li>
        This is our first bullet point
    </li>
</ul>

我使用以下内容来匹配:

String pattern = "^<ul>(<li>.*</li>)+</ul>$";
Regex rgx = new Regex(@pattern, 
    RegexOptions.IgnorePatternWhitespace 
    | RegexOptions.Multiline 
    | RegexOptions.IgnoreCase);
if(rgx.IsMatch(controlValidationValue)) { ... }

当html全部在一行上时会起作用,但是当我得到换行符或空格时就会失败 - 这可能会发生,因为我们的CMS使用富文本插件来创建html。

我尝试使用按位AND(而不是OR),并使用RegexOptions.SingleLine进行播放,但无法解决问题的根源。

任何/所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

一般情况下,我会使用HtmlAgilityPack来解析HTML而不是正则表达式。

string html = @"<ul>
    <li>
        This is our first bullet point
    </li>
</ul>";

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html.Trim());  // Trim to remove leading or trailing spaces if that's possible
bool valid = doc.DocumentNode.ChildNodes.Count == 1 
          && doc.DocumentNode.ChildNodes[0].Name == "ul";