- Set REG_NOTBOL if we've already matched beginning of line and we're examining later parts
- For each pattern we examine, apply it to the remaining bits of the line rather than (potentially) smaller subsets
- Check for REG_NOSUB after we've looked at all patterns initially matching the line
- Keep track of the last match we made to later determine if we're simply not matching any longer or if we need to proceed another byte because we hit a zero-length match
- Match the earliest and longest bit of each line before moving the beginning of what we match to further in the line, past the end of the longest match; this generally matches how gnugrep(1) seems to behave, and seems like pretty good behavior to me
- Finally, bail out of printing any matches if we were set to print all (empty pattern) but -o (output matches) was set
PR: 195763, 180990, 197555, 197531, 181263, 209116