PHP Preg_match несколько элементов в одной строке?

В настоящее время я вставляю некоторый основной текст в БД. Это обычный текст, но пользователи также хотят иметь возможность добавлять рабочие ссылки. Чтобы сохранить внесение массовых изменений, я делаю эти изменения с помощью всплывающего окна, которое будет вставлять их ссылку в следующем формате:

[a]http://www.google.com[/a]

В каждом основном тексте может быть более одной ссылки.

Когда это отображается на соответствующей веб-странице, ссылки изменятся на стандартный формат html:

<a href="http://google.com">http://www.google.com</a>

Кажется, я не могу настроить preg_match, чтобы заставить это делать это несколько раз в строке (см. Пример ниже):

hello world [a]http://google.com[/a] how are you?
Ok. [a]http://yahoo.com[/a] Thanks for asing. [a]http://bing.com[/a]

Любая помощь будет принята с благодарностью!!!

Спасибо, Кейн


person Kane Mitchell    schedule 19.02.2015    source источник
comment
У вас есть попытка?   -  person AbraCadaver    schedule 19.02.2015
comment
Да, я использовал этот... code/[a](.*)[/a]/code Но он вернул бы следующее: code1 =› google.com[/a] как дела? Ok. [a]yahoo.com[/a] Спасибо за отзыв. [a]bing.comcode Таким образом, это были только внешние [a] и [/a]   -  person Kane Mitchell    schedule 19.02.2015
comment
Извините, это не очень легко читать. /[а](.*)[/а]/   -  person Kane Mitchell    schedule 19.02.2015


Ответы (2)


Использовать это:

$str = "[a]http://www.google.com[/a] xy [a]http://www.google.com[/a]";
$str = preg_replace("/\[a\](.*)\[\/a\]/Usi", "<a href=\"\\1\">\\1</a>", $str);
echo $str;

Выход:

<a href="http://www.google.com">http://​www.google.com</a> xy <a href="http://www.google.com">http://​www.google.com</a>;
person ByteHamster    schedule 19.02.2015

Это должно работать:

$str = preg_replace('~\[a](.*?)\[/a]~si', "<a href='$1'>$1</a>", $str);
person Toto    schedule 19.02.2015
comment
Вы экранировали не ту квадратную скобку: [ нужно экранировать, ] не нужно. - person Casimir et Hippolyte; 19.02.2015