public virtual string ToConditionalString(RegexConditionalNode conditionalNode) { if (!IsConditionalSupported) { throw new ConditionalNotSupportedException(RegexLanguage); } if (conditionalNode == null) { throw new ArgumentNullException(nameof(conditionalNode)); } var sb = new StringBuilder(); sb.Append(ToTokenString(RegexToken.ConditionalOpen)); if (string.IsNullOrWhiteSpace(conditionalNode.NameOrNumber)) { sb.Append(ToTokenString(RegexToken.PositiveLookaheadAssertionOpen)) .Append(conditionalNode.IsInnerNodeIncluded ? conditionalNode.InnerNode.ToString() : conditionalNode.Pattern) .Append(ToTokenString(RegexToken.PositiveLookaheadAssertionClose)); } else { sb.Append(ToTokenString(RegexToken.GroupOpen)) .Append(conditionalNode.NameOrNumber) .Append(ToTokenString(RegexToken.GroupClose)); } sb.Append(conditionalNode.TrueValue) .Append(ToTokenString(RegexToken.Alternation)) .Append(conditionalNode.FalseValue) .Append(ToTokenString(RegexToken.ConditionalClose)); return(AddQuantifier(sb.ToString(), conditionalNode.Minimum, conditionalNode.Maximum, conditionalNode.RegexQuantifierOption)); }
/// <summary> /// Add an existing <see cref="RegexConditionalNode"/> to the generator. /// </summary> /// <param name="conditional"><see cref="RegexConditionalNode"/> to be added.</param> /// <returns><see cref="RegexGenerator"/></returns> /// <exception cref="ConditionalNotSupportedException">Conditional is not supported by <see cref="RegexLanguage"/>.</exception> public RegexGenerator AddConditional(RegexConditionalNode conditional) { if (!IsConditionalSupported) { throw new ConditionalNotSupportedException(RegexLanguage); } return(Add(conditional)); }
/// <summary> /// Create and add <see cref="RegexConditionalNode"/> to the generator, and include another <see cref="RegexNode"/> inside. /// </summary> /// <param name="innerNode">An existing <see cref="RegexNode"/> to be included.</param> /// <param name="trueValue">Value of successful match.</param> /// <param name="falseValue">Value of failed match.</param> /// <param name="nameOrNumber">Name or number for backtracking.</param> /// <param name="min">Optional minimum number of occurance.</param> /// <param name="max">Optional maximum number of occurance.</param> /// <param name="quantifierOption">Optional quantifier option.</param> /// <returns><see cref="RegexGenerator"/></returns> /// <exception cref="ConditionalNotSupportedException">Conditional is not supported by <see cref="RegexLanguage"/>.</exception> public RegexGenerator AddConditional(RegexNode innerNode, string trueValue, string falseValue, string nameOrNumber = null, int?min = null, int?max = null, RegexQuantifierOption quantifierOption = RegexQuantifierOption.Greedy) { var conditionalNode = new RegexConditionalNode(innerNode, trueValue, falseValue, nameOrNumber, min, max, quantifierOption); return(AddConditional(conditionalNode)); }