Я знаю, что существует отрицательное регулярное выражение, которое может соответствовать последним вхождениям строки.
Пример: заменить последние строки строки
Я хочу сделать что-то подобное.
Пример:
$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);