Skip to content

Commit 6b84cc9

Browse files
committed
Solved issue "AnythingBut followed by a Maybe should be ignored VerbalExpressions#23" with a flag.
1 parent 0cc1dc2 commit 6b84cc9

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

VerbalExpressions/VerbalExpressions.cs

+8-3
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,16 @@ public static VerbalExpressions DefaultExpression
4242
private StringBuilder _suffixes = new StringBuilder();
4343

4444
private RegexOptions _modifiers = RegexOptions.Multiline;
45-
45+
46+
private bool isPreviousExpressionAnythingBut = false;
47+
4648
#endregion Private Members
4749

4850
#region Private Properties
4951

5052
private string RegexString
5153
{
52-
get { return new StringBuilder().Append(_prefixes).Append(_source).Append(_suffixes).ToString();}
54+
get { return new StringBuilder().Append(_prefixes).Append(_source).Append(_suffixes).ToString(); }
5355
}
5456

5557
private Regex PatternRegex
@@ -58,7 +60,7 @@ private Regex PatternRegex
5860
}
5961

6062
#endregion Private Properties
61-
63+
6264
#region Public Methods
6365

6466
#region Helpers
@@ -126,6 +128,8 @@ public VerbalExpressions Add(string value, bool sanitize = true)
126128
if (value == null)
127129
throw new ArgumentNullException("value must be provided");
128130

131+
if (isPreviousExpressionAnythingBut) return this;
132+
129133
value = sanitize ? Sanitize(value) : value;
130134
_source.Append(value);
131135
return this;
@@ -181,6 +185,7 @@ public VerbalExpressions AnythingBut(string value, bool sanitize = true)
181185
{
182186
value = sanitize ? Sanitize(value) : value;
183187
value = string.Format("([^{0}]*)", value);
188+
isPreviousExpressionAnythingBut = true;
184189
return Add(value, false);
185190
}
186191

VerbalExpressionsUnitTests/VerbalExpressionsTests.cs

+31
Original file line numberDiff line numberDiff line change
@@ -167,5 +167,36 @@ public void UseOneLineSearchOption_WhenCalled_ShouldChangeMultilineModifier()
167167
regex = verbEx.ToRegex();
168168
Assert.IsFalse(regex.Options.HasFlag(RegexOptions.Multiline), "RegexOptions should now have been removed");
169169
}
170+
171+
[Test]
172+
public void IgnoreMaybeAfterAnythingBut()
173+
{
174+
//Arrange
175+
var verbExWithMaybe = VerbalExpressions.DefaultExpression
176+
.StartOfLine()
177+
.Then("http")
178+
.Maybe("s")
179+
.Then("://")
180+
.Maybe("www.")
181+
.AnythingBut(" ")
182+
.Maybe("/")
183+
.EndOfLine();
184+
185+
var verbExWithoutMaybe = VerbalExpressions.DefaultExpression
186+
.StartOfLine()
187+
.Then("http")
188+
.Maybe("s")
189+
.Then("://")
190+
.Maybe("www.")
191+
.AnythingBut(" ")
192+
.EndOfLine();
193+
194+
//Act
195+
var regex = verbExWithMaybe.ToRegex();
196+
var expectedRegex = verbExWithoutMaybe.ToRegex();
197+
198+
//Assert
199+
Assert.AreEqual(expectedRegex.ToString(), regex.ToString());
200+
}
170201
}
171202
}

0 commit comments

Comments
 (0)