我正在尝试修复一个无法正常工作的正则表达式。
就像现在一样:<[^>]*(>|$)
当字符串如下时,该正则表达式有效:
<?UMBRACO_MACRO macroalias="RelatedLinks" PushCollection="Test123" />
但我也需要它来匹配这个:
<?UMBRACO_MACRO macroalias="RelatedLinksPresentation" PushCollection="<links><link title="test" link="1058" type="internal" newwindow="1" /></links>" />
其中一个属性的内容在 xml 中。
该xml值产生3组......
编辑:
代码如下所示:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
...........
Regex tagregex = new Regex("<[^>]*(>|$)", RegexOptions.Singleline | RegexOptions.ExplicitCapture | RegexOptions.Compiled);
MatchCollection tags = tagregex.Matches(_data.Value.ToString());
List<int> editornumbers = new List<int>();
string sortorder = string.Empty;
for (int i = 0; i < _maxNumber; i++)
{
if (!editornumbers.Contains(i))
{
string data = string.Empty;
if (tags.Count > i)
data = tags[i].Value;
MacroEditor macroEditor = new MacroEditor(data, _allowedMacros);
macroEditor.ID = ID + "macroeditor_" + i;
this.ContentTemplateContainer.Controls.Add(macroEditor);
}
}
this.ContentTemplateContainer.Controls.Add(new LiteralControl("</div>"));
if (tags.Count == _maxNumber)
{
_addMacro.Enabled = false;
_limit.Visible = true;
}
MacroContainerEvent.Execute += new MacroContainerEvent.ExecuteHandler(MacroContainerEvent_Execute);
}
我知道他们为什么这样做;他们需要解析它,因为值来自数据库,并且它可能有多个这样的字符串,例如
<?UMBRACO_MACRO macroalias="RelatedLinks" PushCollection="Test123" />
<?UMBRACO_MACRO macroalias="RelatedLinks" PushCollection="<links><link title="test" link="1058" type="internal" newwindow="1" /></links>" />
<?UMBRACO_MACRO macroalias="RelatedLinks" PushCollection="Test123" />
<?UMBRACO_MACRO macroalias="RelatedLinks" PushCollection="Test123" />
那是 4 个宏,并且正则表达式用于将它们拆分为单独的实例。
需要明确的是,这不是 xml,它是 Umbraco 框架从其属性中取出值的模式。这次它恰好是值中的 xml 和需要分隔 UMBRACO_MACRO 字符串的正则表达式吓坏了。
编辑:现在的问题是我如何忽略“” < - 我什至不希望正则表达式关心值字段内的内容,这可能吗?
我发现这太难了,但我找到了另一条路要走:DI now HtmlEncode the value before it is saved and then when I get it Idecode,然后它就可以工作了。