I’ve been using the following site to test a PHP regex so I don’t have to constantly upload: http://www.spaweditor.com/scripts/regex/index.php
I’m using the following regex:
/(.*?).{3}/
on the following string (replacing with nothing):
Non-important data...important data...more important data
and preg_replace is returning:
more important data
yet I expect it to return:
important data...more important data
I thought the ? is the non-greedy modifier. What’s going on here?
Advertisement
Answer
Your non-greedy modifier is working as expected. But preg_match
replaces all occurences of the the (non-greedy) match with the replacement text (""
in your case). If you want only the first one replaced, you could pass 1
as the optional 4th argument (limit) to preg_replace
function (PHP docs for preg_replace). On the website you linked, this can be accomplished by typing 1
into the text input between the word “Flags” and the word “limit”.