[英]Get all matches from Html in Regex with Singleline
我在从此字符串检测所有匹配项时遇到问题。 我想要的是从<p><[CDATA[<!--....-->]]></p>
获得“所有”匹配项
这是我的样本HTML
<div class="row">
<div class="twelve columns">
<p>
<![CDATA[<!--@ControlViewHelper.ExpandableArea(Message.F_CMNG1010(), @<text>
@ControlViewHelper.TextArea(Message.CMNL_USER(), "userid", ""))-->]]>
<p>
<![CDATA[<!--@ControlViewHelper.ExpandableArea(Message.CMNL_PASSWORD(), @<text>
</text>)-->]]>
</p>
<p>
<![CDATA[<!--@ControlViewHelper.ExpandableArea(null, @<text>
</text>)-->]]>
</p>
<p>
<![CDATA[<!--@ControlViewHelper.ExpandableArea(null, @<text>
</text>)-->]]>
</p>
</div>
</div>
这是我当前使用SingleLine和Global激活的正则表达式
<p>[\r*\n*\t*\s*]*<!\[CDATA\[<!--(.*)-->\]\]>[\r*\n*\t*\s*]*<\/p>
结果始终只有一个 ,因为它检测到第一个<p>
和最后一个</p>
新问题,似乎是一个非贪婪的标记解决了它,现在我有了这个正则表达式。
<p>[\r*\n*\t*\s*]*<!\[CDATA\[(.*?)\]\]>[\r*\n*\t*\s*]<\/p>
但这在此html上失败。
<p>
<![CDATA[@ControlViewHelper.ExpandableArea(Message.F_CMNG1010(), @<text>
<p><![CDATA[@ControlViewHelper.TextArea(Message.CMNL_USER(), "userid",
"")]]></p> </text>)]]>
</p>
<p>
<![CDATA[@ControlViewHelper.ExpandableArea(Message.CMNL_PASSWORD(), @<text>
<p><![CDATA[@ControlViewHelper.ExpandableArea(Message.CMNL_PASSWORD(), @<text>TEMPORARY
CODE: Support for inline html as parameters not yet
implemented.</text>)]]><p><![CDATA[@ControlViewHelper.TextBox(null,
"KceQOpKT")]]></p><p><![CDATA[@ControlViewHelper.TextBox(null,
"FYkeojGu")]]></p><p><![CDATA[@ControlViewHelper.TextBox(Message.CMNL_PASSCHECK(),
"qCpXFoIX")]]></p></p> </text>)]]>
</p>
<p>
<![CDATA[@ControlViewHelper.ExpandableArea(null, @<text> </text>)]]>
</p>
<p>
<![CDATA[@ControlViewHelper.ExpandableArea(null, @<text> </text>)]]>
</p>
没有[\\r*\\n*\\t*\\s*]
它无法检测到CDATA
我建议尝试遵循正则表达式。 注意:正则表达式的语法高度依赖于所使用的语言。 例如
在PHP和javascript中:
/<p>\s*<!\[CDATA\[(?:<!--)?([\S\s]*?)(?:-->)?\]\]>\s*<\/p>/gi
在C#中:
var htmlString = ""; // your html goes here
var result = null;
var regexObj = new Regex(@"<p>.*?<!\[CDATA\[(?:<!--)?(.*?)(?:-->)?\]\]>.*?<\/p>",
RegexOptions.IgnoreCase | RegexOptions.Singleline);
result = regexObj.Match(htmlString).Value;
上面的正则表达式将找到<p><[CDATA[<!--....-->]]></p>
。 它可能包含嵌入式/嵌套<p><[CDATA[<!--....-->]]></p>
但是您可以再次使用上述正则表达式轻松检查/删除。
参见演示: https : //regex101.com/r/nU4eZ4/4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.