Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > RegExp > Обрамление текстовых сcылок тегом <a> |
Автор: TetRis 24.04.16, 15:04 |
Написал регулярку, которая ищет и обрамляет текстовые ссылки тегом <a>, но регулярка захватывает рядом стоящие точки, запятые, это при случае если рядом с текстовой ссылкой идут эти символы. Фтп ссылок не будет, поэтому я не учел в регулярке. Мой пример можно посмотреть здесь - http://rubular.com/r/P04ZNa9Td6. Прошу помочь мне исправить этот момент. Благодарю! |
Автор: amk 24.04.16, 16:24 |
Видимо, придётся явно указать символы, которые могут находиться в URL. И усложнить выражение, чтобы не допускать точку в конце URL FTP-ссылки при необходимости включить проще простого - достаточно заменить https? на (https?|ftp) |
Автор: TetRis 24.04.16, 17:21 |
Цитата amk @ Видимо, придётся явно указать символы, которые могут находиться в URL. И усложнить выражение, чтобы не допускать точку в конце URL еще поковыряю Цитата amk @ FTP-ссылки при необходимости включить проще простого - достаточно заменить https? на (https?|ftp) это да, но задачи такой нет |
Автор: AVA12 24.04.16, 18:45 |
Можно сразу после \S+ добавить [\w\/]: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ((https?\:\/\/|www\.)\S+[\w\/]) |
Автор: TetRis 24.04.16, 18:58 |
Цитата AVA12 @ Можно сразу после \S+ добавить [\w\/]: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ((https?\:\/\/|www\.)\S+[\w\/]) Спасибо за мысль! подправил - http://rubular.com/r/scnXrKGPa0 <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> preg_replace_callback("/(((?:ht|f)tps?\:\/\/|www\.)\S+\w\/?)/i", "hrefCallback", $input); 1. Решил все таки добавить ФТП 2. Ваш пример [\w\/] заменил на \w\/?, корректно сделал или лучше [\w\/]? 3. Match выдает по 2 элемента в каждом массиве, если убрать ?: перед ht, то будет 3, не понятно почему, я где-то подсмотрел и дописал ?: дабы убрать лишний элемент. Верно ли я сделал? Инфы по данному "хаку" не нашел, почему удалось излечить. |
Автор: AVA12 25.04.16, 10:23 |
2. Да, так, пожалуй, лучше. 3. Не понял, в чем вопрос. Это не хак, а вполне документированный синтаксис PCRE, (...) означает захватывающую подмаску, (?:...) незахватывающую. |
Автор: TetRis 25.04.16, 10:40 |
[\w\/] или \w\/?, а то маленькая путаница вышла, можно понять по разному спасибо, это я и хотел узнать |