joni
Oniguruma正则表达式库的Java移植版
使用方法
导入
import org.jcodings.specific.UTF8Encoding;
import org.joni.Matcher;
import org.joni.Option;
import org.joni.Regex;
匹配
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);
使用捕获组
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();
}
使用命名捕获组
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]; // 每个名称可以有多个引用
// int begin = region.beg[number];
// int end = region.end[number];
}
}
许可证
Joni 根据 MIT 许可证 发布。