gpt4 book ai didi

com.netflix.spectator.impl.matcher.ZeroOrMoreMatcher类的使用及代码示例

转载 作者:知者 更新时间:2024-03-20 09:28:31 30 4
gpt4 key购买 nike

本文整理了Java中com.netflix.spectator.impl.matcher.ZeroOrMoreMatcher类的一些代码示例,展示了ZeroOrMoreMatcher类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。ZeroOrMoreMatcher类的具体详情如下:
包路径:com.netflix.spectator.impl.matcher.ZeroOrMoreMatcher
类名称:ZeroOrMoreMatcher

ZeroOrMoreMatcher介绍

[英]Matcher that looks for a pattern zero or more times followed by another pattern.
[中]匹配器,它在一个模式之后查找零次或多次另一个模式。

代码示例

代码示例来源:origin: Netflix/spectator

@Override
public Matcher mergeNext(Matcher after) {
 if (after instanceof TrueMatcher) {
  return this;
 }
 Matcher m = (next instanceof TrueMatcher) ? after : SeqMatcher.create(next, after);
 return new ZeroOrMoreMatcher(repeated, m);
}

代码示例来源:origin: Netflix/spectator

/**
 * If the match after a repeated pattern is false, then treat the whole match as false.
 * For example: {@code ".*$." => "$."}.
 */
static Matcher zeroOrMoreFalse(Matcher matcher) {
 if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  if (zm.repeated() instanceof FalseMatcher || zm.next() instanceof FalseMatcher) {
   return zm.next();
  }
 }
 return matcher;
}

代码示例来源:origin: Netflix/spectator

/**
 * If the matcher preceding an OR clause is a repeated any match, move into each branch
 * of the OR clause. This allows for other optimizations such as conversion to an indexOf
 * to take effect for each branch.
 */
static Matcher inlineMatchAnyPrecedingOr(Matcher matcher) {
 if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  if (zm.repeated() instanceof AnyMatcher && zm.next() instanceof OrMatcher) {
   List<Matcher> matchers = zm.next().<OrMatcher>as().matchers();
   List<Matcher> ms = new ArrayList<>();
   for (Matcher m : matchers) {
    ms.add(new ZeroOrMoreMatcher(AnyMatcher.INSTANCE, m));
   }
   return OrMatcher.create(ms);
  }
 }
 return matcher;
}

代码示例来源:origin: Netflix/spectator

/**
 * Get the prefix matcher. This is similar to {@link #head(Matcher)} except that it can
 * reach into character sequences as well as higher level sequences.
 */
static Matcher getPrefix(Matcher matcher) {
 if (matcher instanceof SeqMatcher) {
  List<Matcher> ms = matcher.<SeqMatcher>as().matchers();
  return ms.get(0);
 } else if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  return new ZeroOrMoreMatcher(zm.repeated(), TrueMatcher.INSTANCE);
 } else if (matcher instanceof CharSeqMatcher) {
  String pattern = matcher.<CharSeqMatcher>as().pattern();
  return pattern.isEmpty() ? null : new CharSeqMatcher(pattern.charAt(0));
 } else {
  return matcher;
 }
}

代码示例来源:origin: com.netflix.spectator/spectator-api

/**
 * If a start anchor is followed by a repeated any match, then the start anchor can be removed
 * as it will not change the result ({@code "^.*" => ".*"}).
 */
static Matcher removeStartFollowedByMatchAny(Matcher matcher) {
 if (matcher instanceof SeqMatcher) {
  List<Matcher> matchers = matcher.<SeqMatcher>as().matchers();
  if (matchers.size() == 2
    && matchers.get(0) instanceof StartMatcher
    && matchers.get(1) instanceof ZeroOrMoreMatcher) {
   ZeroOrMoreMatcher zm = matchers.get(1).as();
   if (zm.repeated() instanceof AnyMatcher) {
    return zm;
   }
  }
 }
 return matcher;
}

代码示例来源:origin: com.netflix.spectator/spectator-api

/**
  * Get the suffix matcher. This is similar to {@link #tail(Matcher)} except that it intended
  * to be used with {@link #getPrefix(Matcher)}
  */
 static Matcher getSuffix(Matcher matcher) {
  if (matcher instanceof SeqMatcher) {
   List<Matcher> ms = matcher.<SeqMatcher>as().matchers();
   return SeqMatcher.create(ms.subList(1, ms.size()));
  } else if (matcher instanceof ZeroOrMoreMatcher) {
   ZeroOrMoreMatcher zm = matcher.as();
   return zm.next();
  } else if (matcher instanceof CharSeqMatcher) {
   String pattern = matcher.<CharSeqMatcher>as().pattern();
   return pattern.length() <= 1 ? TrueMatcher.INSTANCE : new CharSeqMatcher(pattern.substring(1));
  } else {
   return TrueMatcher.INSTANCE;
  }
 }
}

代码示例来源:origin: com.netflix.spectator/spectator-api

/**
 * If the matcher preceding an OR clause is a repeated any match, move into each branch
 * of the OR clause. This allows for other optimizations such as conversion to an indexOf
 * to take effect for each branch.
 */
static Matcher inlineMatchAnyPrecedingOr(Matcher matcher) {
 if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  if (zm.repeated() instanceof AnyMatcher && zm.next() instanceof OrMatcher) {
   List<Matcher> matchers = zm.next().<OrMatcher>as().matchers();
   List<Matcher> ms = new ArrayList<>();
   for (Matcher m : matchers) {
    ms.add(new ZeroOrMoreMatcher(AnyMatcher.INSTANCE, m));
   }
   return OrMatcher.create(ms);
  }
 }
 return matcher;
}

代码示例来源:origin: com.netflix.spectator/spectator-api

/**
 * Get the prefix matcher. This is similar to {@link #head(Matcher)} except that it can
 * reach into character sequences as well as higher level sequences.
 */
static Matcher getPrefix(Matcher matcher) {
 if (matcher instanceof SeqMatcher) {
  List<Matcher> ms = matcher.<SeqMatcher>as().matchers();
  return ms.get(0);
 } else if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  return new ZeroOrMoreMatcher(zm.repeated(), TrueMatcher.INSTANCE);
 } else if (matcher instanceof CharSeqMatcher) {
  String pattern = matcher.<CharSeqMatcher>as().pattern();
  return pattern.isEmpty() ? null : new CharSeqMatcher(pattern.charAt(0));
 } else {
  return matcher;
 }
}

代码示例来源:origin: Netflix/spectator

/**
 * If a start anchor is followed by a repeated any match, then the start anchor can be removed
 * as it will not change the result ({@code "^.*" => ".*"}).
 */
static Matcher removeStartFollowedByMatchAny(Matcher matcher) {
 if (matcher instanceof SeqMatcher) {
  List<Matcher> matchers = matcher.<SeqMatcher>as().matchers();
  if (matchers.size() == 2
    && matchers.get(0) instanceof StartMatcher
    && matchers.get(1) instanceof ZeroOrMoreMatcher) {
   ZeroOrMoreMatcher zm = matchers.get(1).as();
   if (zm.repeated() instanceof AnyMatcher) {
    return zm;
   }
  }
 }
 return matcher;
}

代码示例来源:origin: Netflix/spectator

/**
  * Get the suffix matcher. This is similar to {@link #tail(Matcher)} except that it intended
  * to be used with {@link #getPrefix(Matcher)}
  */
 static Matcher getSuffix(Matcher matcher) {
  if (matcher instanceof SeqMatcher) {
   List<Matcher> ms = matcher.<SeqMatcher>as().matchers();
   return SeqMatcher.create(ms.subList(1, ms.size()));
  } else if (matcher instanceof ZeroOrMoreMatcher) {
   ZeroOrMoreMatcher zm = matcher.as();
   return zm.next();
  } else if (matcher instanceof CharSeqMatcher) {
   String pattern = matcher.<CharSeqMatcher>as().pattern();
   return pattern.length() <= 1 ? TrueMatcher.INSTANCE : new CharSeqMatcher(pattern.substring(1));
  } else {
   return TrueMatcher.INSTANCE;
  }
 }
}

代码示例来源:origin: com.netflix.spectator/spectator-api

/**
 * Remove match any pattern at the end, e.g., ({@code "foo.*$" => "foo"}).
 */
static Matcher removeTrailingMatchAny(Matcher matcher) {
 if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  boolean atEnd = zm.next() instanceof TrueMatcher || zm.next() instanceof EndMatcher;
  if (atEnd && zm.repeated() instanceof AnyMatcher) {
   return TrueMatcher.INSTANCE;
  }
 }
 return matcher;
}

代码示例来源:origin: com.netflix.spectator/spectator-api

@Override
public Matcher mergeNext(Matcher after) {
 if (after instanceof TrueMatcher) {
  return this;
 }
 Matcher m = (next instanceof TrueMatcher) ? after : SeqMatcher.create(next, after);
 return new ZeroOrMoreMatcher(repeated, m);
}

代码示例来源:origin: Netflix/spectator

/**
 * Remove match any pattern at the end, e.g., ({@code "foo.*$" => "foo"}).
 */
static Matcher removeTrailingMatchAny(Matcher matcher) {
 if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  boolean atEnd = zm.next() instanceof TrueMatcher || zm.next() instanceof EndMatcher;
  if (atEnd && zm.repeated() instanceof AnyMatcher) {
   return TrueMatcher.INSTANCE;
  }
 }
 return matcher;
}

代码示例来源:origin: Netflix/spectator

@Override
public Matcher rewriteEnd(Function<Matcher, Matcher> f) {
 return f.apply(new ZeroOrMoreMatcher(repeated, next.rewriteEnd(f)));
}

代码示例来源:origin: com.netflix.spectator/spectator-api

/**
 * If the match after a repeated pattern is false, then treat the whole match as false.
 * For example: {@code ".*$." => "$."}.
 */
static Matcher zeroOrMoreFalse(Matcher matcher) {
 if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  if (zm.repeated() instanceof FalseMatcher || zm.next() instanceof FalseMatcher) {
   return zm.next();
  }
 }
 return matcher;
}

代码示例来源:origin: com.netflix.spectator/spectator-api

@Override
public Matcher rewriteEnd(Function<Matcher, Matcher> f) {
 return f.apply(new ZeroOrMoreMatcher(repeated, next.rewriteEnd(f)));
}

代码示例来源:origin: Netflix/spectator

/**
 * Zero or more start anchors is the same as not being anchored by the start.
 */
static Matcher removeRepeatedStart(Matcher matcher) {
 if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  if (zm.repeated() instanceof StartMatcher) {
   return zm.next();
  }
 }
 return matcher;
}

代码示例来源:origin: Netflix/spectator

@Override
public Matcher rewrite(Function<Matcher, Matcher> f) {
 return f.apply(new ZeroOrMoreMatcher(repeated.rewrite(f), next.rewrite(f)));
}

代码示例来源:origin: com.netflix.spectator/spectator-api

/**
 * Zero or more start anchors is the same as not being anchored by the start.
 */
static Matcher removeRepeatedStart(Matcher matcher) {
 if (matcher instanceof ZeroOrMoreMatcher) {
  ZeroOrMoreMatcher zm = matcher.as();
  if (zm.repeated() instanceof StartMatcher) {
   return zm.next();
  }
 }
 return matcher;
}

代码示例来源:origin: com.netflix.spectator/spectator-api

@Override
public Matcher rewrite(Function<Matcher, Matcher> f) {
 return f.apply(new ZeroOrMoreMatcher(repeated.rewrite(f), next.rewrite(f)));
}

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com