2012-01-13 2 views
1

Ok, пытаясь изменить строку следующим образом:PHP - Изменение строки очень быстро

[topic]=2[board]=2 

вернуться вместо этого:

[topic][board]=2 

В описанной выше ситуации, я буду работать с которая равна [topic] и другая строковая переменная, которая равна [topic]=2[board]=2

Но это необходимо сделать для всех ситуаций ... Далее следуют следующие примеры:

profile[area]=account[u]=1 

должен вернуть это:

profile[area][u]=1 

В описанной выше ситуации, я буду работать с строковой переменной, которая равна profile и другой строковой переменной, которая равна profile[area]=account[u]=1

Другой пример:

moderate[area]=groups[sa]=requests 

Должно быть:

moderate[area][sa]=requests 

В описанной выше ситуации, я буду работать с строковой переменной, которая равна moderate и другой строковой переменной, которая равна moderate[area]=groups[sa]=requests

и другое:

[board]=1 

Если вернуться:

[board]=1 

В приведенной выше ситуации я буду работать со строкой переменная, которая равна [board] и другая переменная строка, которая равна [board]=1

В принципе, то, что он должен быть в состоянии сделать, чтобы избавиться от текста только между текстом, которые находятся между скобками только первой и второй скобки (если существует только вторая скобка). Он не должен влиять на третью, четвертую, пятую скобки. Только первый и второй скобки.

Может кто-нибудь, пожалуйста, дайте мне руку с этим?

Спасибо :)

+0

Что является источником укуса n на первом месте? –

+0

Я ненавижу регулярные выражения, и я уверен, что это то, что нужно. – j08691

+0

@ Dagon - строка исходит из значений $ _GET из URL-адреса. Мне нужно сопоставить его с синтаксисом, который хранится в базе данных, которая сообщает программному обеспечению, на какой странице они находятся, чтобы загрузить определенный макет. – SoLoGHoST

ответ

2

Вот регулярное выражение, которое работает:

(?<=\])\=[^\[\r\n]*(?=\[) 

http://regexr.com?2vn71

, что \ г \ п, возможно, потребуется изменить к \ Z в PHP, так как вы выиграли 't иметь дело с разрывами строк, а скорее с концом строки.

Так, что-то вроде:

preg_replace("/(?<=\])\=[^\[\Z]*(?=\[)/", "", $target); 

Edit:

Вот расстройство того, что здесь происходит:

(?<-\]) Убедитесь, что есть [ символ перед совпавшего выражения

\= Соответствие = характер

[^\[\Z]* Match все символы, пока найти [ или конца строки (\Z)

(?=\[) Убедитесь, что есть [ после согласованного выражения

+0

Ничего себе, это БОЛЬШОЕ. Работает очарование! Не уверен в различии между этим и тем, что BloodyWorld опубликовал. – SoLoGHoST

+0

Я обновил его с объяснением того, что делает Regex. Надеюсь это поможет! –

+0

Ничего себе, я тестировал это практически на каждую возможность, и пока это безупречно. Спасибо!!! :) :) – SoLoGHoST

0

Других регулярных выражений, предназначенное для использования с preg_replace()

preg_replace('/^([a-z]+)?(\[[a-z]+\])(.*)(\[(.*))$/Uis', '$1$2$4', $yourData); 
Смежные вопросы