2013-10-04 3 views
2

Мне нужно удалить все квадратные скобки из строки и сохранить строку. Я смотрю вокруг, но все темы OP хотят заменить строку чем-то.удалите двойные квадратные скобки и сохраните строку

Итак: [[link_to_page]]

должны стать: link_to_page

Я думаю, что я должен использовать PHP регулярное выражение, может кто-то помочь мне?

Заранее спасибо

+1

Вы хотите извлечь link_to_page из полного текста, или вы уверены, что ваша строка начинается с [[и заканчивается]] (т.е. содержит только [[link_to_page]])? – fluminis

ответ

5

Вы можете си Просто используйте str_replace.

$string = str_replace(array('[[',']]'),'',$string); 

Но это может привести к закрытию '[[' без ']]'. И ']]' без '[[' открытия.

1

Вы можете использовать preg_replace:

$repl = preg_replace('/(\[|\]){2}/', '', '[[link_to_page]]'); 

ИЛИ используя str_replace:

$repl = str_replace(array('[[', ']]'), '', '[[link_to_page]]'); 
0

Попробуйте

preg_replace(/(\[\[)|(\]\])/, '', $string); 
3

Это не совсем понятно, что вы хотите - но ...

Если вы просто хотите, чтобы «снять все квадратные скобки», не заботясь о спаривании/и т.д., то простой str_replace сделает это:

str_replace(array('[',']') , '' , $string) 

Это не (и не обязательно) регулярное выражение.


Если вы хотите развернуть парные двойные скобки с неизвестным содержимым, вместо этого вам нужно заменить регулярное выражение, которое вместо этого использует preg_replace.

С [ и ] являются метасимволами в регулярном выражении, они должны быть экранированы обратным слэшем.

Чтобы соответствовать всем экземплярам двойной скобки текста, вы можете использовать шаблон \[\[\w+\[\] и заменить эти скобки вы можете поместить содержимое в захвате группу (окружив со скобками) и заменить все экземпляры, как так:

$output = preg_replace('/\[\[(\w+)\[\]/' , '$1' , $string); 

\w соответствует любому буквенно-цифровому или подчеркиванию - если вы хотите разрешить больше/меньше символов, он может быть обновлен, например \[\[([a-z\-_]+)\[\] или что-то имеет смысл.


Если вы хотите воздействовать на содержимое квадратных скобок, см. answer by fluminis.

+0

str_replace с массивом ('[', ']') - потрясающий пример .. спасибо! – Codeversed

1

Если вы хотите только один матч:

preg_match('/\[\[([^\]]+)\]\]/', $yourText, $matches); 
echo $matches[1]; // will echo link_to_page 

Или, если вы хотите, чтобы извлечь все ссылки из текста

preg_match_all('/\[\[([^\]]+)\]\]/', $yourText, $matches); 
foreach($matches as $link) { 
    echo $link[1]; 
} 

Как читать '/\[\[([^\]]+)\]\]/'

  • / начать regex
  • \[\[ два [ символов, но нужно, чтобы избежать их, потому что [это мета carácter
  • ([^\]]+) получить все символы, которые не являются]
  • \]\] два ] символов, но нужно, чтобы избежать их, потому что] это мета carácter
  • / конец regex
Смежные вопросы