Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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
Цитата AVA12 @
2. Да, так, пожалуй, лучше.

[\w\/] или \w\/?, а то маленькая путаница вышла, можно понять по разному

Цитата AVA12 @
незахватывающую

спасибо, это я и хотел узнать

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)