I want to accept the longest set of input characters that match a subsequence of a target tag, anchored at the beginning.
At the point where the input and the target differ, the parser should return everything consumed up until that point.
Here is some Rust pseudocode showing what I want.
let target = "abcdefg";
let (remaining, matched) = prefix_subsequence(target)("abcXYZ");
assert_eq!(matched, "abc");
assert_eq!(remaining, "XYZ");
let (remaining, matched) = prefix_subsequence(target)("abcdefg");
assert_eq!(matched, "abcdefg");
assert_eq!(remaining, "");
let (remaining, matched) = prefix_subsequence(target)("abcXYZabcdefg");
assert_eq!(matched, "abc");
assert_eq!(remaining, "XYZabcdefg");
let (remaining, matched) = prefix_subsequence(target)("avocado");
assert_eq!(matched, "a");
assert_eq!(remaining, "vocado");