Я знаю, что существует отрицательное регулярное выражение, которое может соответствовать последним вхождениям строки.
Пример: заменить последние строки строки
Я хочу сделать что-то подобное.
Пример:
$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 (
и заканчивается )
. .*
- максимальный квантификатор, (.*)
- минимальный квантификатор.
Попробуй использовать:
$string = 'hello example (a) hello example (b) (c)'; echo preg_replace('/\((.*)\)$/', '', $string);
preg_replace('/(?!\s+as\s+.*)/i', '', '(x as y) as z');
пытаясь избавиться от окончательного «как ...» (ожидаемый результат = '(x as y)'
- но это ничего не заменяет. Есть идеи, что не так?