【发布时间】:2025-12-19 04:00:10
【问题描述】:
我有下面的字符串
validates="required positiveInteger" label="Enter the Total Value." name="totalvalue" visibleif="hasvalue:Yes"
所以字符串有 4 个属性 validates,label,name 和 visibleif 具有各自的值
我正在使用dotliquid's regular expression utility class 对属性进行分组。在initialize方法中markup参数下面的值就是上面的字符串。
public class TextBox : DotLiquid.Tag
{
//R.B and R.Q are dotliquid's utility method
private static readonly Regex Syntax = R.B(R.Q(@"(?<validation>{0}+)(\s(?<label>{0}+))?(\s(?<name>{0}+))?(\s(?<onlyif>{0}+))?"), Liquid.QuotedFragment);
private string[] _validations;
private string[] _label;
private string[] _name;
private string[] _onlyif;
public override void Initialize(string tagName, string markup, List<string> tokens)
{
var syntaxMatch = Syntax.Match(markup);
if (syntaxMatch.Success)
{
_validations = syntaxMatch.Groups["validation"].Value.Split("=").TrimQuotes().ToArray();
_label = syntaxMatch.Groups["label"].Value.Split("=").TrimQuotes().ToArray();
_name = syntaxMatch.Groups["name"].Value.Split("=").TrimQuotes().ToArray();
_onlyif = syntaxMatch.Groups["onlyif"].Value.Split("=").TrimQuotes().ToArray();
}
else
{
throw new SyntaxException("Invalid syntax");
}
base.Initialize(tagName, markup, tokens);
}
public override void Render(Context context, TextWriter result)
{
base.Render(context, result);
}
}
代码仅适用于给定的字符串,但是存在问题:
1>如果属性的顺序不同,那么分组会被分配错误的值。
2>name 和 label 属性是必需的,但 validates 和 visibleif 属性不是必需的。 RegEx 应该对此进行验证。
3>如果标记有任何其他额外属性,RegEx 必须失败。
有人可以帮助正确的正则表达式吗?
【问题讨论】: