Хорошо, регулярное выражение, работающее на вашем примере, может выглядеть следующим образом (разрывы строк, введенные для того, чтобы этот зверь читался, необходимо удалить перед использованием):
/^(?P<pr_city>[^,]+), (?P<pr_date>[^-]+) - (?P<corp_name>.*?), a
(?P<corp_city>[^,]+), (?P<corp_state>[^,]+), establishment is
recalling approximately (?P<amount>.*?) of (?P<product>.*?),
which is not compliant with regulations that require (?P<reason>.*?),
the U\.S\. Department of Agriculture\'s Food Safety and Inspection
Service \(FSIS\) announced today\.$/
Итак, в PHP вы можете сделать
if (preg_match('/^(?P<pr_city>[^,]+), (?P<pr_date>[^-]+) - (?P<corp_name>.*?), a (?P<corp_city>[^,]+), (?P<corp_state>[^,]+), establishment is recalling approximately (?P<amount>.*?) of (?P<product>.*?), which is not compliant with regulations that require (?P<reason>.*?), the U\.S\. Department of Agriculture\'s Food Safety and Inspection Service \(FSIS\) announced today\.$/', $subject, $regs)) {
$prcity = $regs['pr_city'];
$prdate = $regs['pr_date'];
... etc.
} else {
$result = "";
}
Это предполагает несколько вещей, например, что нет разрывов строк, и что вводом является вся строка (а не строка большего размера, из которой эта часть должна быть извлечена). Я пытался сделать предположения о законных ценностях, которые имеют некоторый смысл, но есть реальный шанс, что другие данные могут сломать это. Так что, возможно, понадобятся еще несколько тестов.