/** * Extracts alphanumeric parts from {@link Matcher} pattern. * * @param matcher to handle * @return extracted parts */ @NotNull public static String[] getParts(@Nullable Matcher matcher) { if (matcher == null) { return new String[0]; } return getParts(matcher.pattern()); }
/** * Returns a string representing this {@code Matcher}. * The format of this string is unspecified. */ @Override public String toString() { return getClass().getName() + "[pattern=" + pattern() + " region=" + regionStart() + "," + regionEnd() + " lastmatch=" + (matchFound ? group() : "") + "]"; }
@Override public boolean matches(String fileName) { // Special case: if no classes or packages have been defined, // then the screener matches all class files. if (patternList.isEmpty()) { return true; } if (DEBUG) { System.out.println("Matching: " + fileName); } // Scan through list of regexes for (Matcher matcher : patternList) { if (DEBUG) { System.out.print("\tTrying [" + matcher.pattern()); } matcher.reset(fileName); if (matcher.find()) { if (DEBUG) { System.out.println("]: yes!"); } return true; } if (DEBUG) { System.out.println("]: no"); } } return false; }
@Signature public Memory getPattern(Environment env, Memory... args) { return StringMemory.valueOf(matcher.pattern().pattern()); }
@Signature(@Arg(value = "flags")) public Memory withFlags(Environment env, Memory... args) { int flags = convertFlags(args[0]); Pattern pattern = Pattern.compile(matcher.pattern().pattern(), flags); Matcher matcher1 = pattern.matcher(input); return ObjectMemory.valueOf(new WrapRegex(env, matcher1, input)); }
@FastMethod @Signature(@Arg("string")) public Memory test(Environment env, Memory... args) { Matcher matcher1 = matcher.pattern().matcher(args[0].toString()); return TrueMemory.valueOf(matcher1.matches()); }
@Signature(@Arg(value = "pattern", nativeType = WrapRegex.class, optional = @Optional("null"))) public Memory hasNext(Environment env, Memory... args) { if (args[0].isNull()) return scanner.hasNext() ? Memory.TRUE : Memory.FALSE; else return scanner.hasNext(args[0].toObject(WrapRegex.class).getMatcher().pattern()) ? Memory.TRUE : Memory.FALSE; }
if ( matcher.pattern() != PATTERN_FOLLOWING_PROPERTY )
@Override public Pattern convert(Environment env, TraceInfo trace, Memory arg) throws Throwable { if (arg.instanceOf(WrapRegex.class)) { return arg.toObject(WrapRegex.class).getMatcher().pattern(); } else { return Pattern.compile(arg.toString()); } }
@Signature(@Arg(value = "pattern", nativeType = WrapRegex.class)) public Memory useDelimiter(Environment env, Memory... args) { scanner.useDelimiter(args[0].toObject(WrapRegex.class).getMatcher().pattern()); return new ObjectMemory(this); }
private List<PatternMatchResultItem> getPatternMatchResultItems(List<String> questionPatterns, QuestionTypePattern questionTypePattern) { if (questionPatterns == null || questionPatterns.isEmpty()) { LOG.error("模式匹配之前至少指定一个【问题模式】"); return null; } if (questionTypePattern == null || questionTypePattern.getPatterns().isEmpty()) { LOG.error("模式匹配之前至少指定一个【问题类型模式】"); return null; } List<PatternMatchResultItem> patternMatchResultItems = new ArrayList<PatternMatchResultItem>(); //处理所有的模式 List<Pattern> patterns = questionTypePattern.getPatterns(); List<String> types = questionTypePattern.getTypes(); int len = patterns.size(); for (int i = 0; i < len; i++) { Pattern pattern = patterns.get(i); for (String questionPattern : questionPatterns) { Matcher m = pattern.matcher(questionPattern); if (m.matches()) { LOG.info("匹配成功: " + questionPattern + " : " + m.pattern() + " : " + types.get(i)); PatternMatchResultItem item = new PatternMatchResultItem(); item.setOrigin(questionPattern); item.setPattern(pattern.pattern()); item.setType(types.get(i)); patternMatchResultItems.add(item); } } } return patternMatchResultItems; }
@Signature public Memory getFlags(Environment env, Memory... args) { return LongMemory.valueOf(matcher.pattern().flags()); }
/** Method that finds the matches. */ private void findMatch() { try { boolean foundMatch = matcher.find(); while (foundMatch) { currentMatches++; if (currentMatches > options.getMaximum()) { final LineColumn start = text.lineColumn(matcher.start()); if (options.getMessage().isEmpty()) { options.getReporter().log(start.getLine(), MSG_REGEXP_EXCEEDED, matcher.pattern().toString()); } else { options.getReporter() .log(start.getLine(), options.getMessage()); } } foundMatch = matcher.find(); } } // see http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6337993 et al. catch (StackOverflowError ignored) { // OK http://blog.igorminar.com/2008/05/catching-stackoverflowerror-and-bug-in.html // http://programmers.stackexchange.com/questions/ // 209099/is-it-ever-okay-to-catch-stackoverflowerror-in-java options.getReporter().log(1, MSG_STACKOVERFLOW, matcher.pattern().toString()); } }
@Signature(@Arg(value = "regex", nativeType = WrapRegex.class)) public Memory skip(Environment env, Memory... args) { try { scanner.skip(args[0].toObject(WrapRegex.class).getMatcher().pattern()); return Memory.TRUE; } catch (NoSuchElementException e) { return Memory.FALSE; } }
@Signature(@Arg(value = "pattern", nativeType = WrapRegex.class, optional = @Optional("null"))) public Memory next(Environment env, Memory... args) { try { key = key.inc(); return current = StringMemory.valueOf(args.length == 0 || args[0].isNull() ? scanner.next() : scanner.next(args[0].toObject(WrapRegex.class).getMatcher().pattern()) ); } catch (NoSuchElementException e) { valid = false; current = Memory.NULL; key = Memory.NULL; return Memory.NULL; } }
@Signature(@Arg("string")) public Memory with(Environment env, Memory... args) { Matcher matcher1 = matcher.pattern().matcher(args[0].toString()); return new ObjectMemory(new WrapRegex(env, matcher1, args[0].toString())); }
@Signature public Memory groupNames() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { Map<String, Integer> namedGroups = getNamedGroups(matcher.pattern()); ArrayMemory r = new ArrayMemory(); for (String s : namedGroups.keySet()) { r.put(s, StringMemory.valueOf(s)); } return r.toConstant(); }
if (options.getMessage().isEmpty()) { options.getReporter().log(lineNo, MSG_REGEXP_EXCEEDED, matcher.pattern().toString());
private Matcher copyMatcher(Matcher m) { if (m == null) return m; else return m.pattern().matcher(""); }