Просмотр темы
Несколько вопросов по preg_replace
|
|
Zaxap |
Опубликовано 20.04.2014 08:27
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
Имеется просто php-страница, не относящаяся к движку. Тема, впрочем, заезженная: необходимо из http(s)://my.site сделать <a href="http(s)://my.site" target="_blank">http(s)://my.site</a> - сделать ссылку кликабельной. Вот это кусок кода из "!autolink_bbcode_include.php":
но оно не работает (явно благодаря trim и trimlink... Нашел кусок кода в интернете:
который заработал... но, не только по полученному результату, но и по самому коду (<a href="$1" />$1) видно, что тут как-то все не так... В результате оборачивается в <a></a> также весь текст после ссылок. --- Сколько раз убеждаюсь, что думать эффективнее письменно или вслух...
Исправляйте, если что не так :) Необходимо из [idXXXXXX|Человек] получить <a href="idXXXXXX">Человек</a> по типу <a href="$1">$2</a>... Но как производить выборку в уже квадратных скобках...(( --- Попробовал сделать нечто такое:
Но вот, увы... Изменил(а) Zaxap, 20.04.2014 09:47 Зло не дремлет, а я добрый...
|
|
|
Polarfox |
Опубликовано 20.04.2014 11:08
|
Администратор Разработчики Группа поддержки Сообщений: 3384 Зарегистрирован: 20.08.2010 14:03 |
Так? Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
|
|
|
Zaxap |
Опубликовано 20.04.2014 11:38
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
PolarFox, у меня есть проблемы с preg_replace. Необходимо из [idXXXXXX|Человек] получить <a href="idXXXXXX">Человек</a> по типу <a href="$1">$2</a>... Зло не дремлет, а я добрый...
|
|
|
Polarfox |
Опубликовано 20.04.2014 13:07
|
Администратор Разработчики Группа поддержки Сообщений: 3384 Зарегистрирован: 20.08.2010 14:03 |
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
|
|
|
Zaxap |
Опубликовано 20.04.2014 13:40
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
PolarFox, return preg_replace('!(http://[a-z0-9_./?=&-]+)!i', '<a href="$1">$1</a> ', $text." "); Мне надо получить $1 $2, а свой первый вопрос с ссылкой, ответ на который вы мне скинули, я решил часов 6 назад. Изменил(а) Zaxap, 20.04.2014 14:18 Зло не дремлет, а я добрый...
|
|
|
Pisatel |
Опубликовано 20.04.2014 13:55
|
Ветеран Сообщений: 678 Зарегистрирован: 08.02.2013 05:51 |
Честно, я никак не въеду до конца. Дай реальную ссылку, которую нужно найти. И реальный пример того, что должно получиться. Потому что не понимаю, что должно быть в $2
Изменил(а) Pisatel, 20.04.2014 16:41 |
|
|
Zaxap |
Опубликовано 20.04.2014 14:16
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
Pisatel, сделал так:
Тут такая проблема: $text = preg_replace('/[(*?)|(*?)]/', '<a href="vk.com/$1" target="_blank">$2</a>', $text); Вот эти квадратные скобки тоже возвращаются, а "кликабельность" игнорится попросту, в дополнение к этому сие применяется и к некоторым другим "элементам" текста... Пытался сделать так:
но оно жутко косячит и не выполняет того, что от него требуется... --- Насколько я понял, принцип у preg_replace примерно тот же, что и у функции mod_revew в .htaccess... --- Необходимо из [idXXXXXX|Человек] получить <a href="http://vk.com/idXXXXXX">Человек</a> по типу <a href="http://vk.com/$1">$2</a>... Выделенное синим - это $1, красным - $2... Изменил(а) Zaxap, 20.04.2014 14:27 Зло не дремлет, а я добрый...
|
|
|
Pisatel |
Опубликовано 20.04.2014 15:21
|
Ветеран Сообщений: 678 Зарегистрирован: 08.02.2013 05:51 |
Первое, что увидел- экранируй символы, то есть \[ , \|, \], так как это тоже часть выражения []
|
|
|
Polarfox |
Опубликовано 20.04.2014 17:58
|
Администратор Разработчики Группа поддержки Сообщений: 3384 Зарегистрирован: 20.08.2010 14:03 |
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
|
|
|
Zaxap |
Опубликовано 20.04.2014 21:24
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
Pisatel, как-то... не знал, что надо экранизировать, думал, блин, как бороться с [ ] и |, ибо они воспринималось как-то... Как переменные... Зло не дремлет, а я добрый...
|
|
|
Pisatel |
Опубликовано 21.04.2014 04:18
|
Ветеран Сообщений: 678 Зарегистрирован: 08.02.2013 05:51 |
Если это текст [, ], | , который мы ищем- его надо экранировать. Так же, как точку, знак вопроса, слеш... Так что, не работает? |
|
|
Zaxap |
Опубликовано 21.04.2014 07:12
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
Работает, очень даже :) Спасибо! --- Решил не создавать новую тему... Есть
хочу заменить его на
Делаю так:
Но ничего... Изменил(а) Zaxap, 01.06.2014 08:44 Зло не дремлет, а я добрый...
|
|
|
spiker |
Опубликовано 01.06.2014 12:51
|
Опытный пользователь Сообщений: 215 Зарегистрирован: 26.08.2010 08:49 |
Обязательное условие для головоломки preg_replace? А на массив нельзя текст разбить, не? Типа <? |
|
|
Zaxap |
Опубликовано 01.06.2014 13:47
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
spiker, зачем массив? Зачем foreach() О.о Это уже как...психокинезом заставлять двигаться собственные руки, что ли... $text - не космическая станция, а простой текст с <br /> в конце каждой строки... Вот так работает (ну это ясно):
Мне просто нужно в одних местах выбрать перенос строки \n и в другие вставить (пытался врубиться в примеры на php.net, делал по аналогии - глухо)... Изменил(а) Zaxap, 01.06.2014 14:00 Зло не дремлет, а я добрый...
|
|
|
spiker |
Опубликовано 01.06.2014 14:54
|
Опытный пользователь Сообщений: 215 Зарегистрирован: 26.08.2010 08:49 |
Ну да, конечно. Лучше заниматься онанизмом до посинения с одной функцией php, пытаясь выжать из неё всё мыслимое и немыслимое. А не использовать всё разнообразие PHP. Массивы и foreach() это же такая страшная штука, сравнимая с андронным коллайдером... Их же никто не использует для работы с текстом )) . Извини что отвлёк. |
|
|
Zaxap |
Опубликовано 01.06.2014 14:55
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
spiker, просто разбираюсь с регулярками; встал в тупик, когда потребовалось заменить строку с \n... По-моему не так выбираю... но, вроде бы, так... Изменил(а) Zaxap, 01.06.2014 15:52 Зло не дремлет, а я добрый...
|
|
|
spiker |
Опубликовано 01.06.2014 15:03
|
Опытный пользователь Сообщений: 215 Зарегистрирован: 26.08.2010 08:49 |
Регулярки в PHP используются столь мало, что не стоит обращать на них особого внимания и терять время. Это же не Perl. |
|
|
Polarfox |
Опубликовано 01.06.2014 15:43
|
Администратор Разработчики Группа поддержки Сообщений: 3384 Зарегистрирован: 20.08.2010 14:03 |
Это шутка такая? Или сарказм? Регулярки нужны везде где есть данные в виде текста. Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
|
|
|
spiker |
Опубликовано 01.06.2014 16:27
|
Опытный пользователь Сообщений: 215 Зарегистрирован: 26.08.2010 08:49 |
Я и не писал, что они не нужны. Просто они не панацея от всех бед, поиск и манипуляции с текстом всего-лишь. Помог бы тов. Захару лучше с переносом строк, а не умничал. Я вижу решение проблемы, используя массив. Запустить каждую строку по циклу и чистить от переносов. |
|
|
Zaxap |
Опубликовано 02.06.2014 03:48
|
Элита Сообщений: 1090 Зарегистрирован: 05.09.2012 10:32 |
Сделал так: $text=preg_replace("@<br />\r\n@si","</p>\n<p>",$text); Как оказалось, не хватало \r... --- Объединено 07.06.2014 08:50:
Но оно выводится как-то странно... Честно сказать, мне кажется, что так сделать не получится... --- Как выбрать для замены все символы между двумя тегами? Например, что-то такое:
(к коду не придирайтесь, он импровизированный, чисто для примера тут:)) Изменил(а) Zaxap, 07.06.2014 03:34 Зло не дремлет, а я добрый...
|
|
Поделиться этой темой | |
Социальные закладки: | |
URL: | |
BBcode: | |
HTML: |
Перейти на форум: |