$re = '/(ADJ (COMMA ADJ )*)*(NOUN (DASH NOUN )*(DASH )?)*NOUN/m';
$str = 'STOP VERB NOUN NOUN DASH NOUN PUNCT
STOP VERB STOP ADJ ADJ NOUN STOP STOP ADJ NOUN COMMA NOUN PUNCT
STOP VERB STOP ADJ COMMA ADJ NOUN PUNCT
STOP STOP ADJ DASH ADJ NOUN PUNCT
STOP STOP STOP ADJ NOUN NOUN STOP STOP PUNCT';
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