Мне нужно удалить скобки и все между ними:простой помощи регулярных выражений удаление скобок и содержимое между ними
$url = 'abc[wenn]';
echo preg_replace('/\[(.)\]/i','',$url);
Что неправильно о моем регулярном выражении?
Мне нужно удалить скобки и все между ними:простой помощи регулярных выражений удаление скобок и содержимое между ними
$url = 'abc[wenn]';
echo preg_replace('/\[(.)\]/i','',$url);
Что неправильно о моем регулярном выражении?
Вам нужна звезда *
или +
квантор для этой работы:
/\[.*?\]/i
Без него (.)
будет соответствовать только один символ.
Еще лучше, если значение между [
и ]
не может содержать ]
сам, то вы можете использовать более мощное выражение:
/\[[^\]]+\]
безупречный! Спасибо за помощь! – jkushner
@jkushner Youu рад, рад, что я мог бы помочь. –
@ hek2mgl Что это бесполезно? –
У вас нет кванторного набора на месте, поэтому матч не удается и строка повторяется. Вы также используете модификатор i
(без учета регистра), который в этом случае бесполезен и может быть удален.
Признаны следующие кванторы.
* Match 0 or more times
+ Match 1 or more times
Ниже приведен подход, который вы ищите.
preg_replace('/\[[^\]]*\]/', '', $url);
Регулярное выражение:
\[ '['
[^\]]* any character except: '\]' (0 or more times)
\] ']'
Если у вас есть вложенные скобки, которые вы хотите удалить, abc[foo[bar[baz]]]
вы можете использовать следующее:
preg_replace('/\[(?:[^\[\]]|(?R))*\]/', '', $url);
Есть ли возможность, что скобки вложены? – HamZa
Возможно, у вас может быть простой способ манипуляции строками, который может работать лучше, чем регулярное выражение, в зависимости от ожидаемых значений для строки, которую вы оцениваете. Всегда ли будет один набор скобок? Будет ли заключенная в скобки секция всегда находиться в конце строки? –