https://github.com/jruby/joni
Java port of Oniguruma regexp library
https://github.com/jruby/joni
Last synced: about 1 month ago
JSON representation
Java port of Oniguruma regexp library
- Host: GitHub
- URL: https://github.com/jruby/joni
- Owner: jruby
- License: mit
- Created: 2009-10-12T21:15:07.000Z (over 15 years ago)
- Default Branch: master
- Last Pushed: 2025-03-28T21:54:38.000Z (3 months ago)
- Last Synced: 2025-04-12T22:16:48.743Z (2 months ago)
- Language: Java
- Homepage:
- Size: 1.44 MB
- Stars: 172
- Watchers: 11
- Forks: 92
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
joni
====[](https://central.sonatype.com/artifact/org.jruby.joni/joni)
[](https://github.com/jruby/joni/actions/workflows/maven.yml)Java port of [Oniguruma](https://github.com/kkos/oniguruma) regexp library
## Usage
### Imports
```java
import org.jcodings.specific.UTF8Encoding;
import org.joni.Matcher;
import org.joni.Option;
import org.joni.Regex;
```### Matching
```java
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
```java
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
```java
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();
for (Iterator 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](http://www.opensource.org/licenses/MIT).