anchor.diff:      int componentIndex = 0;
       int segmentIndex = 0;
       for (var segment in _segments) {
  +      var component;
         if (components.length <= componentIndex) {
  -        return null; // no component(s) to match this segment
  +        if (_isWildcard(segment)) {
  +          component = null; // wildcard can match no components
  +        } else {
  +          return null; // no component(s) to match this segment
  +        }
  +      } else {
  +        component = components[componentIndex];
         }
  -      var component = components[componentIndex];
   
         if (_isVariable(segment)) {
           // Variable segment
  
positive.code:   /// "/foo/bar?/baz"
  
    ServerRule(String pathPattern, RequestHandler handler) {
      _segments = pathPattern.split(_pathSeparator);
  
      if (_segments.isEmpty || _segments[0] != "~") {
        throw new ArgumentError.value(pathPattern, "pathPattern", "ServerRule: does not start with '~/'");
      }
      _segments.removeAt(0); // remove the leading "~".
  
  
negative.code:         // Wildcard segment
          var numSegmentsLeft = _segments.length - segmentIndex - 1;
          var numConsumed = components.length - componentIndex - numSegmentsLeft;
          if (numConsumed < 0) {
            return null; // insufficient components to satisfy rest of pattern
          }
          result._add(
  