Консультация № 66905
14.12.2006, 07:20
0.00 руб.
0 12 1
Здравствуйте!

Что нужно, для того чтобы исправить обычные кавычки (") на парные («...»), между символом разрыва строки "\n"?

И как сделать ссылку из строки
[url=lib.ru]библиотека Максима Машкова[/url]
Точнее, как вообще обрабатывать подобные конструкции, ведь есть bbc с разными параметрами?

Обсуждение

Неизвестный
14.12.2006, 15:43
общий
Необходимо использовать регулярные выражения.задайте вопрос сюда:http://rusfaq.ru/issues/5/3/367Ну, можно ещё строку просматривать по символьно... и сравнивать, есть ли совпадение... но лучше, имхо, регулярные выражения.
Неизвестный
14.12.2006, 15:51
общий
Я с начало тоже подумал о regexp. Но порой они выдают такие фокусы!...Посимвольный перебор слишком сложный выйдет. Тут как минимум два этапа, просмотр и правка. А если для всех штук пихать в одну функцию, вообще будет мясо. Очем говорю знаю, сам такое писал.
Неизвестный
14.12.2006, 22:26
общий
это ответ
Здравствуйте, Талипов А Н!

Вы можете воспользоваться регулярными выражениями. Обратитесь, например, к мануалу по функции preg_replace - http://ru.php.net/manual/ru/function.preg-replace.php.

В приложении я поместил пример из книги "PHP5 на примерах" (И. Симдянов, М. Кузнецов, С. Голышев, стр. 149), где показано, как конвертировать теги [url][/url] в <a href></a>.

Приложение:
<?php$text = "[url=lib.ru]библиотека Максима Машкова[/url]";$patern = "#\[[\s]*url[\s]*=[\s]*([^\]]*)\]([^\[]*)\[[\s]*/url[\s]*\]#i";$replacement = ‘<a href=\\1>\\2</a>‘;echo preg_replace($patern, $replacement, $text);?>
Неизвестный
15.12.2006, 13:44
общий
наyandexил HTML_parser_BB:http://wboard.ru/topic233.htmlилиhttp://www.softtime.ru/forum/read.php?id_forum=6&id_theme=11806посмотрите, может подойдет,как работает не знаю, не проверял, но по крайней мере регулярные выражения оттуда вытащить можно
Неизвестный
15.12.2006, 13:49
общий
Кстати, насчет кавычек, что значит"между символом разрыва строки "\n"" ?
Неизвестный
15.12.2006, 14:44
общий
Я имею в виду, что если кавычки в одном абзаце. (строке после нажатия enter и до следующего нажатия, то исправить, а если разные строки, то неисправлять). С этими кавычками, да и не только с ними вообще нужно очень аккуратно обращаться, иначе можно повредить сам текст. Всё больше сомневаюсь в том, что с этим может справится регулярное выражение. Тут нужна программа с серьёзным анализатором. И не на php её писать.Когда я имел в виду не только кавычки, я писал о символах выбора шрифтов. Сейчас популярен BBCode, он проще в обработке. Но есть более удобный формат оформления.* жирный *‘ курсивом ‘Остальное точно не помню, да и нет строгово описания.
Неизвестный
15.12.2006, 14:59
общий
Вообще то с этим регулярное выражение справится.Вам просто нужно сказать, что идет кавычка, потом не должно быть "\n" (& #13; & #10;), и снова кавычка.Так вот, если между кавычками будет перенос строки, то ничего не произойдет.
Неизвестный
18.12.2006, 09:44
общий
Посмотрите, как вариант, например функция:function rquo($s){ return preg_replace("/(‘|")(.*?)\\1/","\xAB\\2\xBB",$s);}возвратит $s в которой все спаренные кавычки между которыми нет \n, заменяются на «», вложенные кавычки не обрабатываются.Обработка вложенных кавычек немного сложнее:function rquo2_callback($m){//используется в rquo2 для обработки вложенных кавычек, вынес для наглядности, в принципе, чтобы не засорять namespace можно ее создать анонимно(используя create_function) return "\xAB".rquo2($m[2])."\xBB";}function rquo2($s){ return preg_replace_callback("/(‘|")(.*?)\\1/",‘rquo2_callback‘,$s);}
Неизвестный
18.12.2006, 09:52
общий
Спасибо! Это весьма гружоно, сейчас попробую разобраться.Кстати для апострофа, есть другие открывающие и закрывающие символы, так, что мне кажется всё должно быть ещё сложнее.Хотя со второй функцией я и так в shutdown.И вообще, что это за \xab \xbb и почему \\1 \\2, а не \1 \2?Как раз сейчас разбираюсь с regexp. Лучше самому научиться, чем каждый раз надоедать людям.http://rusfaq.ru/info/question/67247.
Неизвестный
18.12.2006, 10:20
общий
Да! Вот ещё, задачка-то оказалась даже сложнее. Нужно исправлять кавычки между тегами, но не в нутри их. Т.е., чтобы некоторые теги были вообще невидимыми, а другие прерывали обработку также как \n.например чтобы было«<a href="lib.ru">lib.ru</a>»сдесь обработка сработала, а дальше нет"</p><h1>привет!</h1><p>"ля ля ля....Опять берёт сомнение, что с этим справится regexp.
Неизвестный
18.12.2006, 10:37
общий
\xAB и \xBB - шестнадцатиричное представление, символов « и », а \\1 и \\2 - ссылки на 1-ю и 2-ю подмаски. Разбирайтесь с regexp, и увидите, что они, конечно, не все могут, но инструмент очень мощный и полезный
Неизвестный
18.12.2006, 10:45
общий
Спасибо. Я привык к другим обозначениям и не догадался, что это всего лишь шестнадцатиричное.Действительно р.в. очень мощный инструмент. Я уже в этом убедился. И как раньше мог без него жить. В dos и finereader жутко упрощенные варианты, и по этому не считаются.
Форма ответа