Regex для захвата всего до первой необязательной строки

Я хочу захватить шаблон до, но не включая первый экземпляр необязательного другого шаблона с preg_match, например:

ABCDEFGwTW$%                         | capture ABCD
@Q%HG@H%hg afdgwsa g   weg#D DEFG    | capture @Q%HG@H%hg afdgwsa g   weg#D D
@Q%HDEFG@H%hg afdgwsa g   weg#D DEFG | capture @Q%HD

Итак, в приведенном выше случае все, что находится до первого экземпляра шаблона строка EFG захвачена. кроме того, если строка EFG отсутствует, я хочу захватить всю строку.

Я мог бы подумать, что следующее сработает, но не повезло:

$pattern = '/(.*)(?:EFG)?/';
preg_match($pattern, 'Q$TQ@#%GEFGw35hqb', $matches);
print_r($matches);
//should give: 'Q$TQ@#%G'
9
задан Bill the Lizard 12 May 2011 в 14:22
поделиться