В шаблоне ^(?:(?!\<\?php echo[\s?](.*?)\;[\s?]\?\>).)*
используется жадный жетон , который соответствует любому символу, кроме новой строки в начале строки ^
, которая выполняет утверждение отрицательного взгляда.
Это будет соответствовать только customFields[
. В качестве примера вы можете использовать закаленный жадный токен regex demo , но вместо этого вы также можете просто использовать отрицательный символкласс и SKIP FAIL :
^[^[]+\[|<\?php echo\s(.*?)\;\s\?\>(*SKIP)(*FAIL)|\]\[[^]]*\]
Regex demo | Php demo
Например
$re = '/^[^[]+\[|<\?php echo\s(.*?)\;\s\?\>(*SKIP)(*FAIL)|\]\[[^]]*\]/';
$str = 'customFields[<?php echo $field["id"]; ?>][type]';
preg_match_all($re, $str, $matches, PREG_SET_ORDER);
print_r($matches);
Результат
Array
(
[0] => Array
(
[0] => customFields[
)
[1] => Array
(
[0] => ][type]
)
)
Чтобы получить более точное соответствие, вы также можете использовать группы захвата:
^((?:(?!<\?php echo[\s?](?:.*?)\;\s\?>).)*)<\?php echo\s(?:.*?)\;[\s?]\?>(.*)$
regex demo | Php demo