$re = '/^(\d+)\s(\w+)\s([a-zA-Zâéàè()\- ]+)\s(\d{4})\s@\s([\d,.]+)\s?([a-zA-Zâéàè ()]*)$/mu';
$str = '1 owc12 La Fleur (St-Emilion) 2000 @ 23
1 owc6 Cheval Blanc 1970 @ 295 (Rhabillage Château)
1 owc12 Cheval Blanc 1970 @ 285
1 owc12 Cheval Blanc 1975 @ 350 (Rhabillage Château)
1 owc6 magnum Cheval Blanc 1973 @ 520
1 owc6 magnum Cheval Blanc 1978 @ 560
1 owc12 Léoville Las Cases 1992 @ 92
1 owc12 Léoville Barton 1984 @ 53
1 owc12 Beychevelle 1992 @ 62
1 owc12 Giscours 1994 @ 46
1 owc12 La Conseillante 1988 @ 107
1 owc6 Cheval Blanc 1970 @ 295 (Rhabillage Château)
1 owc12 Cheval Blanc 1970 @ 285
1 owc12 Cheval Blanc 1975 @ 350 (Rhabillage Château)
1 owc6 magnum Cheval Blanc 1973 @ 520
1 owc6 magnum Cheval Blanc 1978 @ 560
';
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