README.md in regexp-examples-0.0.1 vs README.md in regexp-examples-0.0.2

- old
+ new

@@ -1,6 +1,7 @@ # regexp-examples +[![Gem Version](https://badge.fury.io/rb/regexp-examples.svg)](http://badge.fury.io/rb/regexp-examples) Extends the Regexp class with the method: Regexp#examples This method generates a list of (some\*) strings that will match the given regular expression @@ -20,11 +21,38 @@ # 'http://www.github.com', 'https://github.com', 'https://www.github.com'] /(I(N(C(E(P(T(I(O(N)))))))))*/.examples #=> ["", "INCEPTION", "INCEPTIONINCEPTION"] /what about (backreferences\?) \1/.examples #=> ['what about backreferences? backreferences?'] ``` -The current version is still very much under development, and contains various bugs/missing features... -However, when completed, this will hopefully work for ALL regular expressions, *except for lookarounds*! +## Supported syntax + +* All forms of repeaters (quantifiers), e.g. `/a*/`, `/a+/`, `/a?/`, `/a{1,4}/`, `/a{3,}/`, `a{,2}` +* Boolean "Or" groups, e.g. `/a|b|c/` +* Character sets (inluding ranges and negation!), e.g. `/[abc]/`, `/[A-Z0-9]/`, `/[^a-z]/` +* Escaped characters, e.g. `/\n/`, `/\w/`, `/\D/` (and so on...) +* Capture groups, and backreferences(!!), e.g. `/(this|that) \1/` +* Arbitrarily complex combinations of all the above! + +## Not-Yet-Supported syntax + +I plan to add the following features to the gem (in order of most -> least likely), but have not yet got round to it: + +* Non-capture groups, e.g. `/(?:foo)/` +* Named capture groups, e.g. `(?<name>bar)/` +* Throw exceptions if illegal syntax (see below) is used +* POSIX bracket expressions, e.g. `/[[:alnum:]]/`, `/[[:space:]]/` +* Options, e.g. `/pattern/i`, `/foo.*bar/m` +* Unicode characters, e.g. `/\p{L}/`, `/\p{Arabic}/` + +## Impossible features ("illegal syntax") + +The following features in the regex language can never be properly implemented into this gem because, put simply, they are not technically "regular"! +If you'd like to understand this in more detail, there are many good blog posts out on the internet. The [wikipedia entry](http://en.wikipedia.org/wiki/Regular_expression)'s not bad either. + +* Lookarounds, e.g. `/foo(?=bar)/`, `/(?<!foo)bar/` +* Anchors, e.g. `/\bword\b/`, `/line1\n^line2/` (although a special case could perhaps be made to allow `\A`, `^`, `\z` and `$` at the beginning/end of the pattern) + +(Note: Backreferences are not really "regular" either, but I got these to work with a bit of hackery!) ## Installation Add this line to your application's Gemfile: