https://github.com/codebox/readable-regex
Java library for creating readable regular expressions
https://github.com/codebox/readable-regex
java readability regular-expressions
Last synced: 7 months ago
JSON representation
Java library for creating readable regular expressions
- Host: GitHub
- URL: https://github.com/codebox/readable-regex
- Owner: codebox
- License: mit
- Created: 2011-12-28T11:25:16.000Z (about 14 years ago)
- Default Branch: master
- Last Pushed: 2017-08-11T17:23:14.000Z (over 8 years ago)
- Last Synced: 2023-07-05T04:17:36.763Z (over 2 years ago)
- Topics: java, readability, regular-expressions
- Language: Java
- Homepage: http://codebox.org.uk/pages/readable-regular-expressions
- Size: 22.5 KB
- Stars: 25
- Watchers: 4
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.markdown
- License: LICENSE
Awesome Lists containing this project
README
Readable Regex
==============
This library provides a way to make complex regular expressions in Java code more readable.
The best way to explain what it does to show some examples:
// Matches a single digit
RegExBuilder.build(anyDigit()); // "[0-9]"
// Matches exactly 2 digits
RegExBuilder.build(exactly(2).of(anyDigit())); // "[0-9]{2}"
// Matches between 2 and 4 letters
RegExBuilder.build(between(2,4).of(anyLetter())); // "[a-zA-Z]{2,4}"
Characters that have special meaning within a regular expression are escaped automatically:
// Matches one or more occurrences of the text 'Ho?'
RegExBuilder.build(oneOrMore().of("Ho?")); // "(Ho\?)+"
// Matches anything except an opening or closing square bracket, or a backslash
RegExBuilder.build(
anyCharacterExcept(
characters('[', ']','\\')
)
); // "[^[\\]\\\\]"
Readability is greatly improved for more complex expressions:
// More or less validates the format of an email address
// [_\\-A-Za-z0-9]+(\\.[_\\-A-Za-z0-9]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*\\.[a-zA-Z]{2,}
RegExBuilder.build(
oneOrMore().of(
anyOneOf(
characters('_','-'), range('A','Z'), range('a','z'), range('0','9')
)
),
zeroOrMore().of(
text("."),
oneOrMore().of(
anyOneOf(
characters('_','-'), range('A','Z'), range('a','z'), range('0','9')
)
)
),
text("@"),
oneOrMore().of(
anyOneOf(
range('A','Z'), range('a','z'), range('0','9')
)
),
zeroOrMore().of(
text("."),
oneOrMore().of(
anyOneOf(
range('A','Z'), range('a','z'), range('0','9')
)
)
),
text("."),
atLeast(2).of(
anyLetter()
)
);
All classes in the library are immutable, and therefore instances are re-usable and thread-safe.