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; }
void nameAdd(byte[]name, int nameP, int nameEnd, int backRef, Syntax syntax) { if (nameEnd - nameP <= 0) throw new ValueException(ErrorMessages.EMPTY_GROUP_NAME); NameEntry e = null; if (nameTable == null) { nameTable = new BytesHash<NameEntry>(); // 13, oni defaults to 5 } else { e = nameFind(name, nameP, nameEnd); } if (e == null) { // dup the name here as oni does ?, what for ? (it has to manage it, we don't) e = new NameEntry(name, nameP, nameEnd); nameTable.putDirect(name, nameP, nameEnd, e); } else if (e.backNum >= 1 && !syntax.allowMultiplexDefinitionName()) { throw new ValueException(ErrorMessages.MULTIPLEX_DEFINED_NAME, new String(name, nameP, nameEnd - nameP)); } e.addBackref(backRef); }
public void addBackref(int backRef) { backNum++; switch (backNum) { case 1: backRef1 = backRef; break; case 2: alloc(); backRefs[0] = backRef1; backRefs[1] = backRef; break; default: ensureSize(); backRefs[backNum - 1] = backRef; } }
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 void addBackref(int backRef) { backNum++; switch (backNum) { case 1: backRef1 = backRef; break; case 2: alloc(); backRefs[0] = backRef1; backRefs[1] = backRef; break; default: ensureSize(); backRefs[backNum - 1] = backRef; } }
void nameAdd(byte[]name, int nameP, int nameEnd, int backRef, Syntax syntax) { if (nameEnd - nameP <= 0) throw new ValueException(ErrorMessages.EMPTY_GROUP_NAME); NameEntry e = null; if (nameTable == null) { nameTable = new BytesHash<NameEntry>(); // 13, oni defaults to 5 } else { e = nameFind(name, nameP, nameEnd); } if (e == null) { // dup the name here as oni does ?, what for ? (it has to manage it, we don't) e = new NameEntry(name, nameP, nameEnd); nameTable.putDirect(name, nameP, nameEnd, e); } else if (e.backNum >= 1 && !syntax.allowMultiplexDefinitionName()) { throw new ValueException(ErrorMessages.MULTIPLEX_DEFINED_NAME, new String(name, nameP, nameEnd - nameP)); } e.addBackref(backRef); }
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; }
/** 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; }
@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;