$re = '/(?m)^([^\r\n]+)\s*\n([^\r\n]+)\s*\n([^\r\n]+):\s*([^\r\n]+)\s*\n([^\r\n]+):\s*([^\r\n]+)(?:\s*\n([^\r\n]+):\s*([^\r\n]+))?\s*\nDirections:\s*\n((?:.+\s*\n?)+?)(?=^[^\r\n]+\s*\n[^\r\n]+\s*\n[^\r\n]+:|\z)/m';
$str = 'Bob\'s Diner
Reefer
Location: Mike\'s Beef Barn
Time: 1,584
Stop: Highway Hotel.
Directions:
Go south on Broadway.
Get on freeway 30 South. Exit Main St.
Go south on Main to Highway Hotel.
Go north on Main. Go east on Highway 15. Exit Market St.
1522 Market St.
Comfy Pillows and Mattresses
Dry Van
Location: Innovative Furniture
Time: 223
Directions:
Turn right and go to Seville Ave.
Turn left on St. Michael St.
Go to end at the Comfy Sign.
Washington County Construction
Low Boy
Location: Marble Quarry in Gainesville.
Time: 1,135
Stop: Mountainside Motel.
Directions:
Make a U-turn on Alameda Ave. and a right on Chantilly Lane.
Get on freeway 67 East.
Pass the Hospital and Exit Seward St.
Turn left on Coral St. to Mountainside Motel on right.
Exit motel and go east on Jefferson and then right on Belhaven.
Follow Joelle Ln. to Hwy 49.
Turn right at the Red Hill Junction. Go east on Harewood Rd.
Turn left on Blue Heron St.
8964 Red Rooster St.
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php