У меня есть строка, и я хотел бы узнать первую позицию шаблона. Но его следует искать, только если он не заключен в квадратные скобки.
Пример строки: "This is a (first) test with the first hit
"
Я хочу знать положение второго first
=> 32 . Чтобы соответствовать ему, (first)
необходимо игнорировать, потому что он заключен в скобки.
К сожалению, мне не нужно игнорировать только круглые скобки (
)
, я должен игнорировать квадрат скобки [
]
и скобки {
}
тоже.
Я пробовал это:
preg_match(
'/^(.*?)(first)/',
"This is a (first) test with the first hit",
$matches
);
$result = strlen( $matches[2] );
Работает нормально, но результат - позиция первого совпадения (11).
Итак, мне нужно изменить .*?
.
Я попытался заменить его на .(?:\(.*?\))*?
в надежде, что все символы в скобках будут игнорируется. Но это не соответствует скобкам.
И я не могу использовать отрицательный прогноз '/(?<!\()first(?!\))/'
, так как у меня есть три разных типа скобок, которые должны соответствовать открывающей и закрывающей скобкам.