我想用 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'