Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/a7mdfre7at/masterly.fluentregex
A creative way to Create regular expression patterns using readable API.
https://github.com/a7mdfre7at/masterly.fluentregex
fluent-api regex regular-expression string-manipulation string-matching
Last synced: 2 months ago
JSON representation
A creative way to Create regular expression patterns using readable API.
- Host: GitHub
- URL: https://github.com/a7mdfre7at/masterly.fluentregex
- Owner: a7mdfre7at
- License: mit
- Created: 2021-11-19T01:51:59.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2022-03-14T11:53:29.000Z (almost 3 years ago)
- Last Synced: 2024-08-09T08:09:05.696Z (6 months ago)
- Topics: fluent-api, regex, regular-expression, string-manipulation, string-matching
- Language: C#
- Homepage:
- Size: 72.3 KB
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Masterly.FluentRegex
A creative way to Create regular expression patterns using readable API[![Nuget](https://img.shields.io/nuget/v/Masterly.FluentRegex?style=flat-square)](https://www.nuget.org/packages/Masterly.FluentRegex) ![Nuget](https://img.shields.io/nuget/dt/Masterly.FluentRegex?label=nuget%20downloads&style=flat-square) ![GitHub last commit](https://img.shields.io/github/last-commit/a7mdfre7at/Masterly.FluentRegex?style=flat-square) ![GitHub](https://img.shields.io/github/license/a7mdfre7at/Masterly.FluentRegex?style=flat-square) [![Build](https://github.com/a7mdfre7at/Masterly.FluentRegex/actions/workflows/build.yml/badge.svg)](https://github.com/a7mdfre7at/Masterly.FluentRegex/actions/workflows/build.yml) [![CodeQL Analysis](https://github.com/a7mdfre7at/Masterly.FluentRegex/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/a7mdfre7at/Masterly.FluentRegex/actions/workflows/codeql-analysis.yml) [![Publish to NuGet](https://github.com/a7mdfre7at/Masterly.FluentRegex/actions/workflows/publish.yml/badge.svg)](https://github.com/a7mdfre7at/Masterly.FluentRegex/actions/workflows/publish.yml)
## Give a Star! :star:
If you like or are using this project please give it a star. Thanks!
## Introduction
> Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. *- Jamie Zawinski*
Does that make this a 3rd problem?
Regular expressions can be extremely useful in the right circumstances, but they can also be terriblly complicated to understand. Consider this regular expression for parsing email addresses based on the RFC 5322 standard:
```c#
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
| "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]
| \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")
@ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
| \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:
(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]
| \\[\x01-\x09\x0b\x0c\x0e-\x7f])+)
\])
```What human can possibly read and understand that?
In an effort to create a more readable method of writing regular expressions in .NET, I've created **FluentRegex**.
## Examples
Let's use a simpler email regular expression to demonstrate some of the library's capabilities.
Normally, we'd write the regular expression something like this:
```c#
string regex = @"^[a-zA-Z\d\.-_]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,4}$";
```With FluentRegex, we can express it like this:
```c#
Pattern p = Pattern.With
.StartOfLine
.Set(Pattern.With.Letter.Digit.Literal(".-_")).Repeat.OneOrMore
.Literal("@")
.Set(Pattern.With.Letter.Digit.Literal(".-")).Repeat.OneOrMore
.Literal(".")
.Set(Pattern.With.Letter).Repeat.Times(2, 4)
.EndOfLine;
```For more samples, please see tests in unit test project [Here](https://github.com/a7mdfre7at/Masterly.FluentRegex/tree/master/test/Masterly.FluentRegex.UnitTests "Here")
## License
MIT
**Free Software, Hell Yeah!**