Регулярное выражение PHP соответствует последним вхождениям в соответствие шаблону

Я знаю, что существует отрицательное регулярное выражение, которое может соответствовать последним вхождениям строки.

Пример: заменить последние строки строки

Я хочу сделать что-то подобное.

Пример:

$string = 'hello example (a) hello example (b) (c)'; echo preg_replace('/\(.*?\)(?!.*\(.*?\))/', '', $string); 

Я пытаюсь заменить последние вхождения (. *), Но я потерпел неудачу. Результат, который я получил, – приветственный пример . Он заменяет весь первый (и последний), который является (a) примером hello (b) (c) .

Мой ожидаемый примерпример приветствия (a) привет (b) .

Любой может дать какую-то подсказку? Какое правильное регулярное выражение для достижения того, что я хочу. Большое спасибо.

Вы хотите использовать здесь отрицательный класс символов вместо .*? ,

.* Внутри вашего утверждения lookahead будет соответствовать вплоть до последнего появления (...) затем назад, последовательно сохраняя порядок наследования.

 preg_replace('/\([^)]*\)(?!.*\([^)]*\))/', '', $string); 

Чтобы упростить эту задачу, просто сохраните все до последнего появления.

 preg_replace('/.*\K\(.*?\)/', '', $string); 

Ошибка youre использует \(.*\) Это заменяет полную подстроку, которая начинается с whith ( и заканчивается whith ) . .* – максимальный квантификатор, (.*) – минимальный квантификатор.

Попробуй использовать:

$string = 'hello example (a) hello example (b) (c)'; echo preg_replace('/\((.*)\)$/', '', $string);