пытаюсь написать собственный парсер для ИМГ тегов. PHP: $data = "текст факинг текст [img]hack.jpg[/img] второй текст [img]deex.jpg[/img]"; eregi("(\[img\]([a-z.]+)\[/img\])", $data, $regs); echo ("<pre>"); print_r($regs); echo ("</pre>"); на данный момент встал вопрос: почему результат выводит один тег два раза? PHP: Array ( [0] => [img]hack.jpg[/img] [1] => [img]hack.jpg[/img] [2] => hack.jpg )
ничо не понимаю ну а здесь что может быть не так? PHP: $str = "текст факинг текст [img]hack.jpg[/img] второй текст [img]deex.jpg[/img]"; $pattern = "/([img\])/i"; $replacement = "1 \${1}"; print preg_replace($pattern, $replacement, $str); // line 30 PHP: Warning: preg_replace() [function.preg-replace]: Compilation failed: missing terminating ] for character class at offset 8 in h:\home\localhost\www\txtdb\r.php on line 30
Ошибка в паттерне: Обрати внимание, что у тебя внутри шаблона идёт квадратная скобка [. В терминах regexp всё что между квадратных скобок трактуется как класс символов ([a-zA-Z] и т.д.). У тебя же, как я понимаю, знчение квадратной скобки должно быть "как символ"... Вот и экранируй его тогда... Причём вторую скобку ты проэкранировал, а первую забыл... Делай так:
cпасибо большое, тока я всё ещё не могу получить желаемое: PHP: $str = "текст факинг текст [img]hack.jpg[/img] второй текст [img]deex.jpg[/img]"; $pattern = "/(\[img\])([a-z.A-Z0-9]+)(\[/img\])/i"; $replacement = "<a href='img/\${2}'>\${2}</a>"; print preg_replace($pattern, $replacement, $str); // line 30 проблема вот в этом: $pattern = "/(\[img\])([a-z.A-Z0-9]+)(\[/img\])/i"; когда я добавляю этот кусок, у меня всё бьётся. а без него я получаю то что хочу - превращается в ссылку, но в конце остаётся [/img]: текст факинг текст hack.jpg[/img] второй текст deex.jpg[/img]