Home

There is a newer version of this page. You can find it here.

BNFA is C++ regular expression matcher based on non-deterministic finite automata (NFA).

Rules

BNFA uses overloaded operators for writing regular expressions. This syntax was inspired by Boost.Spirit (www.boost.org).

ElementRegular expressionBNFA
OptionalA?-A
One-or-moreA++A
Zero-or-moreA**A
Exactly N timesA{N}A(N)
At least N timesA{N,}A(N,infinity)
Between M and N timesA{M,N}A(M,N)
ConcatenationABA >> B
AlternationA | BA | B
Separated listA(BA)*A % B
Positive lookahead(?=A)&A
Negative lookahead(?!A)!A
Characteratext("a")
Any character.any()
Character sequenceabctext("abc")
Character group[abc]group("abc")
Character range[a-z]range('a', 'z')
Character class[:alnum:]
[:alpha:]
...
alnum()
alpha()

...

Examples

  • Match alphabetic letters with [A-Za-z]:

rule alpha = range('A', 'Z') | range('a', 'z');

  • Match identifier (alphabetic character followed by zero or more alphanumeric characters):

rule digit = range('0', '9');
rule alnum = digit | alpha;
rule identifier1 = alpha >> *alnum; // Alternative #1
rule identifier2 = !digit >> +alnum; // Alternative #2

rule floating = -group("+-") >> ( ( *digit >> text(".") >> +digit ) | +digit );


MongoDB Logo MongoDB