Skip to content

Commit 1253395

Browse files
committed
Merge pull request #34 from Tavio/maybe_with_builder
maybe() method now accepts a builder as parameter
2 parents 44ad0ec + 89cfa80 commit 1253395

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/main/java/ru/lanwen/verbalregex/VerbalExpression.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package ru.lanwen.verbalregex;
22

3+
import static java.lang.String.valueOf;
4+
35
import java.util.regex.Matcher;
46
import java.util.regex.Pattern;
57

6-
import static java.lang.String.valueOf;
7-
88
public class VerbalExpression {
99

1010
private final Pattern pattern;
@@ -170,6 +170,28 @@ public Builder find(final String value) {
170170
public Builder maybe(final String pValue) {
171171
return this.then(pValue).add("?");
172172
}
173+
174+
/**
175+
* Add a regex to the expression that might appear once (or not)
176+
* Example:
177+
* The following matches all names that have a prefix or not.
178+
* VerbalExpression.Builder namePrefix = regex().oneOf("Mr.", "Ms.");
179+
* VerbalExpression name = regex()
180+
* .maybe(namePrefix)
181+
* .space()
182+
* .zeroOrMore()
183+
* .word()
184+
* .oneOrMore()
185+
* .build();
186+
* regex.test("Mr. Bond/") //true
187+
* regex.test("James") //true
188+
*
189+
* @param pValue - the string to be looked for
190+
* @return this builder
191+
*/
192+
public Builder maybe(final Builder regex) {
193+
return this.group().add(regex).endGr().add("?");
194+
}
173195

174196
/**
175197
* Add expression that matches anything (includes empty string)

src/test/java/ru/lanwen/verbalregex/BasicFunctionalityUnitTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,4 +579,20 @@ public void testOneOfWithClosedCapture() {
579579
assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abcdef"));
580580
assertThat(testRegex.getText("xxxdefzzz", 1), equalTo("def"));
581581
}
582+
583+
@Test
584+
public void shouldAddMaybeWithOneOfFromAnotherBuilder() {
585+
VerbalExpression.Builder namePrefix = regex().oneOf("Mr.", "Ms.");
586+
VerbalExpression name = regex()
587+
.maybe(namePrefix)
588+
.space()
589+
.zeroOrMore()
590+
.word()
591+
.oneOrMore()
592+
.build();
593+
594+
assertThat("Is a name with prefix", name, matchesTo("Mr. Bond"));
595+
assertThat("Is a name without prefix", name, matchesTo("James"));
596+
597+
}
582598
}

0 commit comments

Comments
 (0)