String Matching with Variable Length Gaps