Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP preg_replace non-greedy trouble

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?

like image 342
Jeff Lamb Avatar asked Dec 14 '09 05:12

Jeff Lamb


1 Answers

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".

like image 137
Asaph Avatar answered Sep 19 '22 15:09

Asaph