yodaexolon Опубликовано 6 января, 2016 Жалоба Поделиться Опубликовано 6 января, 2016 Что прописать, чтобы не учитывался символ # в ссылке на якорь и в тегах цвета (например #000000) return preg_replace('/#(\w+)/u', '<a href="tags?keyword=$1">#$1</a>', $str); Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 6 января, 2016 Жалоба Поделиться Опубликовано 6 января, 2016 "чтобы не учитывался символ # в ссылке на якорь", надо соответственно программировать браузеры... Вы б написали толком, что хотите. Можно гадать по-разному:1. преобразовать строку, удалив из ссылок #text_after,2. преобразовать строку, удалив из атрибутов цвета #color,3. вхождения в строку типа #text преобразовать в ссылку,4. другое? Пример желаемого преобразования хорошо бы дать... Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 6 января, 2016 Автор Жалоба Поделиться Опубликовано 6 января, 2016 вхождения в строку типа #text преобразовать в ссылку Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 6 января, 2016 Жалоба Поделиться Опубликовано 6 января, 2016 вхождения в строку типа #text преобразовать в ссылку Ваш код из первого поста это как раз и делает... Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 6 января, 2016 Автор Жалоба Поделиться Опубликовано 6 января, 2016 мне нужно, чтобы преобразовывался текст с символом # в ссылку и игнорировались коды цвета типа #000000 и ссылки содержащие # в тексте делаю хэш теги и эта регулярка преобразует и то, что нужно слова с # и также то что не нужно код цвета и ссылки с якорем # Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 6 января, 2016 Жалоба Поделиться Опубликовано 6 января, 2016 мне нужно, чтобы преобразовывался текст с символом # в ссылку и игнорировались коды цвета типа #000000 и ссылки содержащие # в тексте делаю хэш теги и эта регулярка преобразует и то, что нужно слова с # и также то что не нужно код цвета и ссылки с якорем # Пример желаемого преобразования хорошо бы дать... Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 6 января, 2016 Автор Жалоба Поделиться Опубликовано 6 января, 2016 обычный текст: текст .................... #хэштег .......... - это все нормально заменяет на нужную ссылку <a href="tags?keyword=хэштег</a> если в тексте ссылка с якорем: текст................ <a href=sitename/blog/статья#якорь</a> .........текст - заменяет на корявую ссылку: <a href=sitename/blog/статья<a href="tags?keyword=хэштег</a></a>так же если в тексте стиль с цветом #код цвета Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 6 января, 2016 Жалоба Поделиться Опубликовано 6 января, 2016 (изменено) мне нужно, чтобы преобразовывался текст с символом # в ссылку и игнорировались коды цвета типа #000000 и ссылки содержащие # в тексте делаю хэш теги и эта регулярка преобразует и то, что нужно слова с # и также то что не нужно код цвета и ссылки с якорем # реально а вы не подумали ставить другой тег?) который бы не давал конфликт с цветами и анкорами? например не одну решетку а две ##хэштег. какая разница какой он, если всеровно дальше идет замена на ссылку Изменено 6 января, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 6 января, 2016 Автор Жалоба Поделиться Опубликовано 6 января, 2016 не красиво будет в тексте тег с ## Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 6 января, 2016 Жалоба Поделиться Опубликовано 6 января, 2016 (изменено) не красиво будет в тексте тег с ## я вас удивлю, но $str = 'если бы я правильно ##понимал регулярки <a href="#name">и еще что-то</a>'; echo preg_replace('/##(\w+)/u', '<a href="tags?keyword=$1">#$1</a>', $str); возвращает если бы я правильно <a href="tags?keyword=понимал">#понимал</a> регулярки <a href="#name">и еще что-то</a> Изменено 6 января, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 6 января, 2016 Автор Жалоба Поделиться Опубликовано 6 января, 2016 спасибо, так работает, а можно сделать, чтоб один раз решетку прописывать? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 6 января, 2016 Жалоба Поделиться Опубликовано 6 января, 2016 (изменено) спасибо, так работает, а можно сделать, чтоб один раз решетку прописывать? зачем вы усложняете себе жизнь? можно еще учитывать что перед хештегом должен быть пробел, тогда должно работать с одним # и код $str = 'если бы я правильно #понимал регулярки <a href="#name">и еще что-то</a> <span style="color:#FF0000;">цветной текст</span>'; echo preg_replace('/\s#(\w+)/u', ' <a href="tags?keyword=$1">#$1</a>', $str); вернет если бы я правильно #понимал регулярки и еще что-то цветной текст Изменено 6 января, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 6 января, 2016 Автор Жалоба Поделиться Опубликовано 6 января, 2016 Теперь два пробела надо ставить, может есть значение которое игнорировало б второй #? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 6 января, 2016 Жалоба Поделиться Опубликовано 6 января, 2016 (изменено) Теперь два пробела надо ставить, может есть значение которое игнорировало б второй #? мда, вы читаете что пишу? внимательно посмотрите, не надо там два пробела.в вашем случае строка будет return preg_replace('/\s#(\w+)/u', ' <a href="tags?keyword=$1">#$1</a>', $str); что я выше описал, только уже с return Изменено 6 января, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 6 января, 2016 Автор Жалоба Поделиться Опубликовано 6 января, 2016 Урааа заработало, СПАСИБО ВАМ!!!!!!!!!!!! Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 11 января, 2016 Автор Жалоба Поделиться Опубликовано 11 января, 2016 зачем вы усложняете себе жизнь? можно еще учитывать что перед хештегом должен быть пробел, тогда должно работать с одним # и код $str = 'если бы я правильно #понимал регулярки <a href="#name">и еще что-то</a> <span style="color:#FF0000;">цветной текст</span>'; echo preg_replace('/\s#(\w+)/u', ' <a href="tags?keyword=$1">#$1</a>', $str); вернетОпять косяки, когда цвет с пробелом: color: #FF0000; Цитата Ссылка на сообщение Поделиться на другие сайты
chocolate_moles Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 Опять косяки, когда цвет с пробелом: color: #FF0000; Замените в документе color: # на color:# Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 11 января, 2016 Автор Жалоба Поделиться Опубликовано 11 января, 2016 редактор не дает это сделать, задолбался уже, буду по совету mishanya ставить две решетки Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 редактор не дает это сделать, задолбался уже, буду по совету mishanya ставить две решетки я вам советовал не усложнять свою жизнь). всеровно ## будет выводить один # если хотите заменить пробел у цвета, пробуйте перед регуляркой так сделать: $str = str_replace('color: #','color:#', $str); return preg_replace('/\s#(\w+)/u', ' <a href="tags?keyword=$1">#$1</a>', $str); Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 11 января, 2016 Автор Жалоба Поделиться Опубликовано 11 января, 2016 Спасибо, теперь работает как надо. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 12 января, 2016 Жалоба Поделиться Опубликовано 12 января, 2016 А еще в 'color: #' может быть ДВА пробела...А еще в стилях может быть, например, ' border: 1px #888 solid'... Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 12 января, 2016 Автор Жалоба Поделиться Опубликовано 12 января, 2016 А еще в 'color: #' может быть ДВА пробела...А еще в стилях может быть, например, ' border: 1px #888 solid'...А как все это обойти? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 января, 2016 Жалоба Поделиться Опубликовано 12 января, 2016 (изменено) А как все это обойти? редактор не поставит там два пробела где цвет и я очень сомневаюсь что border: 1px #888 solid вы будете использовать в описнии. для каждого случая не будете городить условия. заменяйте # на ## и все. всеровно видить их два будете только вы в админке. какая разница? Изменено 12 января, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 12 января, 2016 Жалоба Поделиться Опубликовано 12 января, 2016 (изменено) Ну что бы не учитывать стили - без усложнения никак. Вот набросал код. Сильно не проверял но должно работать: $new_str = $str; if(preg_match_all('#(style|href)=([\'"])([^\'"]+?)\\2#iu', $str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Затираем style foreach($matches as $m){ $_length = strlen($m[0][0]); $new_str = substr_replace($new_str, str_repeat('*', $_length), $m[0][1], $_length); } } if(preg_match_all('/#(\w+)/iu', $new_str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Поиск наших тегов $_offset = 0; foreach($matches as $m){ $_length = strlen($m[0][0]); $replace = '<a href="tags?keyword='.$m[1][0].'">#'.$m[1][0].'</a>'; $str = substr_replace($str, $replace, $m[0][1] - $_offset, $_length); $_offset += $_length - strlen($replace); } } return $str; За первый проход - затираем атрибуты которые могут совпадать с нашим патерном - звездочками (*).За второй, исходя из того что осталось, меняем наши метки. Изменено 13 января, 2016 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
yodaexolon Опубликовано 12 января, 2016 Автор Жалоба Поделиться Опубликовано 12 января, 2016 yr4ik, Ваш код не хочет работать, та же проблема что в самом начале.Спасибо всем за помощь, код mishanya прекрасно справляется с задачей. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.