正则表达式在第一个可选字符串之前捕获所有内容

mul*_*sen 9 php 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
Run Code Online (Sandbox Code Playgroud)

因此,在上述情况下,EFG捕获字符串的第一个实例之前的任何内容.另外,如果EFG字符串不存在,那么我想捕获整个字符串.

我本以为会有以下工作,但没有这样的运气:

$pattern = '/(.*)(?:EFG)?/';
preg_match($pattern, 'Q$TQ@#%GEFGw35hqb', $matches);
print_r($matches);
//should give: 'Q$TQ@#%G'
Run Code Online (Sandbox Code Playgroud)

Jen*_*ens 19

您可以使用

'/(.*?)(?=EFG|$)/'
Run Code Online (Sandbox Code Playgroud)