2013-11-29 2 views
1

Мне нужно удалить скобки и все между ними:простой помощи регулярных выражений удаление скобок и содержимое между ними

$url = 'abc[wenn]'; 
echo preg_replace('/\[(.)\]/i','',$url); 

Что неправильно о моем регулярном выражении?

+0

Есть ли возможность, что скобки вложены? – HamZa

+0

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

ответ

3

Вам нужна звезда * или + квантор для этой работы:

/\[.*?\]/i 

Без него (.) будет соответствовать только один символ.

Еще лучше, если значение между [ и ] не может содержать ] сам, то вы можете использовать более мощное выражение:

/\[[^\]]+\] 
+0

безупречный! Спасибо за помощь! – jkushner

+0

@jkushner Youu рад, рад, что я мог бы помочь. –

+0

@ hek2mgl Что это бесполезно? –

2

У вас нет кванторного набора на месте, поэтому матч не удается и строка повторяется. Вы также используете модификатор 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); 
Смежные вопросы