Examples

These examples demonstrate pattern matching in the MatchRegex operator.

Example 1: Simple concatenation

The predicates that are used in the example are:


param
  predicates: {
    big=i>1000,
    middle=i>10 && i<1000,
    little=i<10 };
If you use a pattern of big little, a sequence of tuples where i has the values of:
  • 2000, 0 is a match.
  • 2000, 100, 10 is not a match, because the value 100 does not fit the pattern.

Example 2: A simple example of disjunction and grouping.

If you use the same predicates as the previous example, and a pattern of (big | middle) little:
  • 2000, 10 is a match.
  • 100, 10 is a match.

Example 3: A simple example of optional expressions.

If you use the same predicates as the previous examples, and a pattern of big middle? little:
  • 2000, 10 is a match.
  • 2000, 100, 10 is a match.

Example 4: Detecting patterns in stock prices.

In the following example, the input stream Quotes consists of stock price information over time. The task is to detect "M-shape" patterns, also known as double-peak formation. In other words, the pattern detects two rise and drop peaks, followed by a deep drop below the start of the pattern.


stream<MatchT> Matches = MatchRegex(Quotes) {
  param
    pattern     : ". rise+ drop+ rise+ drop* deep";
    partitionBy : symbol;     
    predicates  : {
      rise = price>First(price)  && price>=Last(price),
      drop = price>=First(price) && price<Last(price),
      deep = price<First(price) && price<Last(price)
    };
  output
    Matches : symbol=symbol, seqNum=First(seqNum),
              count=Count(), maxPrice=Max(price);
}