private String getMatchedValue(byte[] message, Region region) { Iterator<NameEntry> iterator = pattern.namedBackrefIterator(); // Skip the key iterator.next(); // Running all over the value options and take the one that captured while (iterator.hasNext()) { NameEntry entry = iterator.next(); for (int number : entry.getBackRefs()) { if (region.beg[number] >= 0) { return extractString(message, region.beg[number], region.end[number]); } } } return null; }
private static String[] names(final Regex regex) { final String[] names = new String[regex.numberOfCaptures() + 1]; if (regex.numberOfNames() == 0) return names; for (final Iterator<NameEntry> iter = regex.namedBackrefIterator(); iter.hasNext();) { final NameEntry backref = iter.next(); final String name = new String(backref.name, backref.nameP, backref.nameEnd - backref.nameP, StandardCharsets.UTF_8); for (final int index : backref.getBackRefs()) { names[index] = name; } } return names; } }
private static String[] names(final Regex regex) { final String[] names = new String[regex.numberOfCaptures() + 1]; if (regex.numberOfNames() == 0) return names; for (final Iterator<NameEntry> iter = regex.namedBackrefIterator(); iter.hasNext();) { final NameEntry backref = iter.next(); final String name = new String(backref.name, backref.nameP, backref.nameEnd - backref.nameP, StandardCharsets.UTF_8); for (final int index : backref.getBackRefs()) { names[index] = name; } } return names; } }
public List<Match> matches(String text) throws InterruptedException { List<Match> matches = new ArrayList<>(); byte[] textAsBytes = text.getBytes(StandardCharsets.UTF_8); Matcher matcher = compiledExpression.matcher(textAsBytes); int result = matcher.search(0, textAsBytes.length, Option.MULTILINE); boolean matchNotFound = result == -1; if (matchNotFound) { return null; } if (result == INTERRUPTED) { throw new InterruptedException(); } if (compiledExpression.numberOfNames() == 0) { return matches; } Region region = matcher.getEagerRegion(); for (Iterator<NameEntry> iterator = compiledExpression.namedBackrefIterator(); iterator.hasNext();) { NameEntry entry = iterator.next(); String groupName = extractString(entry.name, entry.nameP, entry.nameEnd); int[] matchNumbers = entry.getBackRefs(); matches.add(match(groupName, region, textAsBytes, matchNumbers)); } return matches; }
NameEntry e = entry.next(); String groupName = new String(e.name, e.nameP, e.nameEnd - e.nameP, StandardCharsets.UTF_8); for (int number : e.getBackRefs()) { if (region.beg[number] >= 0) { String matchValue = new String(textAsBytes, region.beg[number], region.end[number] - region.beg[number],
int number = e.getBackRefs()[0]; int begin = region.beg[number]; int end = region.end[number];
/** rb_reg_named_captures * */ @JRubyMethod public IRubyObject named_captures(ThreadContext context) { check(); final Ruby runtime = context.runtime; RubyHash hash = RubyHash.newHash(runtime); if (pattern.numberOfNames() == 0) return hash; for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); int[] backrefs = e.getBackRefs(); RubyArray ary = RubyArray.newBlankArrayInternal(runtime, backrefs.length); for (int idx = 0; idx<backrefs.length; idx++) { ary.store(idx, RubyFixnum.newFixnum(runtime, backrefs[idx])); } RubyString name = RubyString.newStringShared(runtime, e.name, e.nameP, e.nameEnd - e.nameP); hash.fastASet(name.freeze(context), ary); } return hash; }
@JRubyMethod public RubyHash named_captures(ThreadContext context) { check(); Ruby runtime = context.runtime; RubyHash hash = RubyHash.newHash(runtime); if (regexp == context.nil) return hash; for (Iterator<NameEntry> i = getPattern().namedBackrefIterator(); i.hasNext();) { NameEntry entry = i.next(); RubyString key = RubyString.newStringShared(runtime, new ByteList(entry.name, entry.nameP, entry.nameEnd - entry.nameP, regexp.getEncoding(), false)); boolean found = false; for (int b : entry.getBackRefs()) { IRubyObject value = RubyRegexp.nth_match(b, this); if (value.isTrue()) { hash.op_asetForString(runtime, key, value); found = true; } } if (!found) hash.op_asetForString(runtime, key, context.nil); } return hash; }
/** rb_reg_named_captures * */ @JRubyMethod public IRubyObject named_captures(ThreadContext context) { check(); final Ruby runtime = context.runtime; RubyHash hash = RubyHash.newHash(runtime); if (pattern.numberOfNames() == 0) return hash; for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); int[] backrefs = e.getBackRefs(); RubyArray ary = RubyArray.newBlankArrayInternal(runtime, backrefs.length); for (int idx = 0; idx<backrefs.length; idx++) { ary.store(idx, RubyFixnum.newFixnum(runtime, backrefs[idx])); } RubyString name = RubyString.newStringShared(runtime, e.name, e.nameP, e.nameEnd - e.nameP); hash.fastASet(name.freeze(context), ary); } return hash; }
@JRubyMethod public RubyHash named_captures(ThreadContext context) { check(); Ruby runtime = context.runtime; RubyHash hash = RubyHash.newHash(runtime); if (regexp == context.nil) return hash; for (Iterator<NameEntry> i = getPattern().namedBackrefIterator(); i.hasNext();) { NameEntry entry = i.next(); RubyString key = RubyString.newStringShared(runtime, new ByteList(entry.name, entry.nameP, entry.nameEnd - entry.nameP, regexp.getEncoding(), false)); boolean found = false; for (int b : entry.getBackRefs()) { IRubyObject value = RubyRegexp.nth_match(b, this); if (value.isTrue()) { hash.op_asetForString(runtime, key, value); found = true; } } if (!found) hash.op_asetForString(runtime, key, context.nil); } return hash; }
/** rb_reg_named_captures * */ @JRubyMethod(name = "named_captures", compat = CompatVersion.RUBY1_9) public IRubyObject named_captures(ThreadContext context) { RubyHash hash = RubyHash.newHash(getRuntime()); if (pattern.numberOfNames() == 0) return hash; for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); int[]backrefs = e.getBackRefs(); RubyArray ary = getRuntime().newArray(backrefs.length); for (int backref : backrefs) ary.append(RubyFixnum.newFixnum(getRuntime(), backref)); hash.fastASet(RubyString.newStringShared(getRuntime(), e.name, e.nameP, e.nameEnd - e.nameP).freeze(context), ary); } return hash; }
/** rb_reg_named_captures * */ @JRubyMethod(name = "named_captures", compat = CompatVersion.RUBY1_9) public IRubyObject named_captures(ThreadContext context) { check(); RubyHash hash = RubyHash.newHash(getRuntime()); if (pattern.numberOfNames() == 0) return hash; for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); int[]backrefs = e.getBackRefs(); RubyArray ary = getRuntime().newArray(backrefs.length); for (int backref : backrefs) ary.append(RubyFixnum.newFixnum(getRuntime(), backref)); hash.fastASet(RubyString.newStringShared(getRuntime(), e.name, e.nameP, e.nameEnd - e.nameP).freeze(context), ary); } return hash; }
/** rb_reg_named_captures * */ @JRubyMethod(name = "named_captures", compat = CompatVersion.RUBY1_9) public IRubyObject named_captures(ThreadContext context) { check(); RubyHash hash = RubyHash.newHash(getRuntime()); if (pattern.numberOfNames() == 0) return hash; for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); int[]backrefs = e.getBackRefs(); RubyArray ary = getRuntime().newArray(backrefs.length); for (int backref : backrefs) ary.append(RubyFixnum.newFixnum(getRuntime(), backref)); hash.fastASet(RubyString.newStringShared(getRuntime(), e.name, e.nameP, e.nameEnd - e.nameP).freeze(context), ary); } return hash; }
for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); for (int num : e.getBackRefs()) names[num] = e;
for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); for (int num : e.getBackRefs()) names[num] = e;
for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); for (int num : e.getBackRefs()) names[num] = e;
for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); for (int num : e.getBackRefs()) names[num] = e;
for (Iterator<NameEntry> i = pattern.namedBackrefIterator(); i.hasNext();) { NameEntry e = i.next(); for (int num : e.getBackRefs()) names[num] = e;