## Why is this an issue?

When a reluctant (or lazy) quantifier is followed by a pattern that can match the empty string or directly by the end of the regex, it will always match zero times for `*?` or one time for `+?`. If a reluctant quantifier is followed directly by the end anchor (`$`), it behaves indistinguishably from a greedy quantifier while being less efficient.

This is likely a sign that the regex does not work as intended.

### Noncompliant code example

    preg_replace("/start\w*?(end)?/", "x", "start123endstart456"); // Noncompliant. In contrast to what one would expect, the result is not "xx".
    preg_match("/^\d*?$/", "123456789"); // Noncompliant. Matches the same as "/^\d*$/", but will backtrack in every position.

### Compliant solution

    preg_replace("/start\w*?(end|$)/", "x", "start123endstart456"); // Result is "xx".
    preg_match("/^\d*$/", "123456789");