Java port of Oniguruma regexp library
Java
Pull request Compare This branch is 82 commits behind jruby:master.
Latest commit e197e18 Oct 25, 2013 @bbrowning bbrowning Squash all the JS options to OP2_OPTION_ECMASCRIPT
This also guards against a couple of minor behavioral changes to
ensure they only happen when OP2_OPTION_ECMASCRIPT is set.

README.md

joni

Java port of Oniguruma regexp library

Usage

Imports

    import org.jcodings.specific.UTF8Encoding;
    import org.joni.Matcher;
    import org.joni.Option;
    import org.joni.Regex;

Matching

    
    byte[] pattern = "a*".getBytes();
    byte[] str = "aaa".getBytes();

    Regex regex = new Regex(pattern, 0, pattern.length, Option.NONE, UTF8Encoding.INSTANCE);
    Matcher matcher = regex.matcher(str);
    int result = matcher.search(0, str.length, Option.DEFAULT);

Using captures

  byte[] pattern = "(a*)".getBytes();
  byte[] str = "aaa".getBytes();

  Regex regex = new Regex(pattern, 0, pattern.length, Option.NONE, UTF8Encoding.INSTANCE);
  Matcher matcher = regex.matcher(str);
  int result = matcher.search(0, str.length, Option.DEFAULT);
  if (result != -1) {
      Region region = matcher.getEagerRegion();
  }

Using named captures

  byte[] pattern = "(?<name>a*)".getBytes();
  byte[] str = "aaa".getBytes();

  Regex regex = new Regex(pattern, 0, pattern.length, Option.NONE, UTF8Encoding.INSTANCE);
  Matcher matcher = regex.matcher(str);
  int result = matcher.search(0, str.length, Option.DEFAULT);
  if (result != -1) {
      Region region = matcher.getEagerRegion();
      for (Iterator<NameEntry> entry = regex.namedBackrefIterator(); entry.hasNext();) {
          NameEntry e = entry.next();
          int number = e.getBackRefs()[0]; // can have many refs per name
          // int begin = region.beg[number];
          // int end = region.end[number];

      }
  }

License

Joni is released under the MIT License.