Имя: Пароль:
IT
Веб-мастеринг
Подскажите по регулярным выражениям php
,
0 Ислам
 
19.02.14
06:18
нужно сделать замену как это сделано на форумах PHPBB:
[img]blabla[/img] меняем на <img src="blabla">
[url]blabla[/url] меняем на <url href="blabla">
все остальные символы меняем функцией htmlspecialchars()
Я первые две замены вот так сделал:

$htmltext = preg_replace_callback( "#\[img\](.*?)\[/img\]#", function ($matches) {return ( '<img src="' . $matches[1] . '"/>' );}, $text );
$htmltext = preg_replace_callback( "#\[url\](.*?)\[/url\]#", function ($matches) {return ( '<url src="' . $matches[1] . '"/>' );}, $htmltext );

А если третью замену делаю:

$htmltext = htmlspecialchars($htmltext);

то все URL портятся. Как быть? Желательно попроще, а то не поверят что я сам сделал.
1 sda553
 
19.02.14
06:52
А цель какая? вывести html внутри htmlа?
2 Ислам
 
19.02.14
07:11
(1) как вариант, да.
3 Asmody
 
19.02.14
07:54
Сделай htmlspecialchars до разбора тегов. Это если попроще
4 Ислам
 
19.02.14
08:03
(3) Тогда все ссылки испортятся до разбора тегов.

Вместо http://
везде станет http%3A%2F%2F

Так не подходит.

Нужно придумать так, чтобы htmlspecialchars сработало для всего кроме того что распознают первые два регулярных выражения.
5 Ислам
 
19.02.14
08:41
Как сделать регулярное выражение, выбирающее все куски текста кроме

\[img\](.*?)\[/img\]

и

\[url\](.*?)\[/url\]

?
6 Ислам
 
19.02.14
09:11
Или для простоты, как выбрать все куски текста кроме подстроки "blbla"?

например, текст: " ыв blbla к мв blbla аыыв blbla"
Нужно получить: " ыв ", " к мв ", " аыыв "
7 Ислам
 
19.02.14
09:27
как это сделать?
8 Ислам
 
19.02.14
10:23
Никто не знает регулярные выражения?
9 Ислам
 
19.02.14
10:41
На другом форуме подсказали так:

( . )( . )

и еще так:

(_!_)

Но не понятно куда это ставить и как должно работать
10 Ислам
 
19.02.14
11:09
Помогите же мне хоть кто-нибудь!
11 Ислам
 
19.02.14
11:22
Хелп! Моя благодарность не будет иметь границ! (в разумных пределах, конечно)
12 Ислам
 
19.02.14
11:58
Готов даже заплатить!
13 Ислам
 
19.02.14
12:12
Мне очень нужно это сегодня сделать. Кто может помочь?
14 Jaap Vduul
 
19.02.14
12:13
15 Ислам
 
19.02.14
12:15
Даже не знаю как это можно тут применить. Скорее всего никак.
16 Ислам
 
19.02.14
12:37
Что еще можно попробовать сделать?
17 Ислам
 
19.02.14
13:28
Скажите
18 vqwy
 
19.02.14
13:29
в 9 же совет нормальный
19 Ислам
 
19.02.14
13:34
Никто не говорит что он не нормальный. Но мне нужно решить вопрос как можно скорее. Скажите как
20 kokamoonga
 
20.02.14
06:17
(6) (19) если нужно решить вопрос именно в такой формулировке как в (6), то простым сплитом это делается http://phpassist.com/17f44#1
21 Ислам
 
20.02.14
08:21
(20) нужно с учетом формулировки из (0), а именно: регулярными выражениями.
22 Ислам
 
20.02.14
08:22
Сделал так, но почему это выражение не работает?

$text = "начало текста[url=url 1]ссылка 1[/url]середина текста[url=url 2]ссылка 2[/url]конец текста";
preg_replace_callback( "#^|\[url=.*?\].*?\[/url\](.+?)\[url=.*?\].*?\[/url\]|$#",
    function ($matches) { echo "<pre>"; print_r ($matches); echo "</pre>"; },
    $text );



Выдает:

Array
(
    [0] =>
)

Array
(
    [0] => [url=url 1]ссылка 1[/url]середина текста[url=url 2]ссылка 2[/url]
    [1] => середина текста
)

Array
(
    [0] =>
)



А начало и конец текста не захватывает почему то.
23 kokamoonga
 
20.02.14
08:29
(22) "#^(.*)\[url=.*?\].*?\[/url\](.+?)\[url=.*?\].*?\[/url\](.*)$#"
24 Ислам
 
20.02.14
08:51
(23) А если в тексте будет другое количество тегов?
25 Поpyчик-4
 
20.02.14
08:55
(0) Взять phpBB2 и посмотреть как происходить парсинг bbcode [img] в includes/bbcode.php
26 kokamoonga
 
20.02.14
09:17
(24) А если бы бабушка была дедушкой? Не занимайся херней, регулярки можно и нужно использовать в связке со средствами языка. Попытки решить проблему исключительно регулярками оправданы только в случае, когда остальные способы более затратны и сложны. Здесь явно не тот случай.
27 Asmody
 
20.02.14
09:25
(4) так напиши внутри функций что-то типа
function ($matches) {return ( '<img src="' .htmlspecialchars_decode($matches[1]) . '"/>' );}
2 + 2 = 3.9999999999999999999999999999999...