In WordPress rewriting, I often see examples like this:
$wp_rewrite->add_rewrite_tag('%issue_project%', '(.+?/)?', 'issue_project=');
It has a ? mark at the end of the regular expression. Some don't. What is the difference?
In WordPress rewriting, I often see examples like this:
$wp_rewrite->add_rewrite_tag('%issue_project%', '(.+?/)?', 'issue_project=');
It has a ? mark at the end of the regular expression. Some don't. What is the difference?
It means a lazy rather than a greedy regular expression. See here.
What do lazy and greedy mean in the context of regular expressions?
.+ means one or more characters -- any characters
.+/ means one or more characters ending with the very last / found. So given abc/def/gh/ the .+ matches abc/def/gh.
.+?/ means one or more characters matching the shortest sequence, not the longest. So given abc/def/gh/ the .+ matches abc.
The (whatever)? trailing ? after the parenthetical expression makes that expression optional. (whatever)? means the same thing as (whatever){0,1}, that is, it accepts zero or one repetitions of (whatever).