Is there any faster way instead of using preg_match in the following code?
First of all, put up a timer so you know if things get better.

You're repeating '/' . preg_quote($search) . '/i'for each book. You should create the search string only once or else you are wasting time:

&lt;?php
$books  = simplexml_load_file('planet.xml');
$search = '2004';
$regex = '/' . preg_quote($search) . '/i';
foreach ($books-&gt;entry as $entry) {
    if (preg_match($regex, $entry-&gt;date_iso)) {
        echo $entry-&gt;dc_date;
    }
}
?&gt;


If you are only looking for 2004 or similar you might analyze if simpler functions would be faster e.g. strpos. 

Also the /i modifier might be unnecessary.