implement POSIX regexp support master
authorJo-Philipp Wich <jo@mein.io>
Sun, 4 Feb 2018 17:36:07 +0000 (18:36 +0100)
committerJo-Philipp Wich <jo@mein.io>
Sun, 4 Feb 2018 17:45:21 +0000 (18:45 +0100)
commitc7e938d6582a436dddc938539e72dd1320625c54
treeae5ed1e3ee150ea8936433fed04f6a2dd03ac2d0
parentcd6629fc75787cbfcbec12282bd738373bc46ac6
implement POSIX regexp support

Introduce a new operator `~` and new `/.../eis` regular expression syntax.

This allows filtering by regular expression, e.g.

   jsonfilter -s '[ "foo", "bar", "baz" ]' -e '$[@ ~ /^b/]'

... would yield the values `bar` and `baz`.

Possible regular expression modifiers are:

  - `e` ... enable extended POSIX regular expressions
  - `i` ... perform case insensitive matches
  - `s` ... let ranges and `.` match the newline character

A regular expression literal may occur on the left or the right side of
the `~` operator, but not on both.

In case neither side of the `~` operator is a regular expression, the right
side will be treated as regular expression pattern. Non-string values are
converted to their string representation before performing matching.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
lexer.c
lexer.h
matcher.c
matcher.h
parser.y