Помощь с URL Regex - PullRequest
       1

Помощь с URL Regex

0 голосов
/ 25 марта 2011

У меня есть следующий код для форматирования URL:

<cfset textToFormat = ReReplaceNoCase( textToFormat, '((http(s)?://)?((www\.)?\w+\.\w{2,6}))', '<a class="actionLink" href="http://\4">\1</a>', "ALL" ) />

Проблема в сложных URL-адресах, она не работает должным образом, например, этот URL:

http://refer.ccbill.com/cgi-bin/clicks.cgi?CA=111111&PA=222222

ТакжеТакой URL не работает:

http://secure.someurl.com/track/AAAAAA4wLjAuMC4w 

Пожалуйста, кто-нибудь может мне помочь с RegEx, который можно использовать для всех URL-адресов.

Спасибо

Ответы [ 7 ]

1 голос
/ 08 апреля 2011

Вот решение, которое может работать на вас. Во-первых, укажите URL-адреса, начинающиеся с http://, https:// или www., например:

<cfset textToFormat = ReReplaceNoCase( textToFormat,
    '((https?://|www\.)[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$])',
    '<a class="actionLink" href="\1">\1</a>',
    "ALL" )
/>

Далее исправьте недействительные ссылки, созданные на первом шаге. (URL, начинающиеся с www., требуют префикса http://):

<cfset textToFormat = ReReplaceNoCase( textToFormat,
    'href="www\.',
    'href="http://www.',
    "ALL" )
/>

Обратите внимание, что это не проверено, поскольку у меня нет доступа к ColdFusion. Кроме того, их синтаксис регулярных выражений плохо документирован, поэтому в этом решении используются только очень элементарные выражения.

Предостережения: Ссылка на URL-адреса трудна для выполнения, и существует довольно много случаев, когда это решение не сработает. См .: Проблема с URL-адресами Джеффа Этвуда и Улучшенный либеральный, точный шаблон регулярных выражений для сопоставления URL-адресов Джона Грубера и URL Linkification от вас действительно для большего информация о преобразовании URL в ссылки.

1 голос
/ 08 апреля 2011

Вы можете использовать это выражение:

(https?://)?(([a-z\d.-]+)(/.*)?)

и использовать его как:

<a class="actionLink" href="http://\2">\3</a>

Простые тесты:

http://secure.someurl.com/track/AAAAAA4wLjAuMC4w дает <a class="actionLink" href="http://secure.someurl.com/track/AAAAAA4wLjAuMC4w">secure.someurl.com</a>

http://refer.ccbill.com/cgi-bin/clicks.cgi?CA=111111&PA=222222 дает <a class="actionLink" href="http://refer.ccbill.com/cgi-bin/clicks.cgi?CA=111111&PA=222222">refer.ccbill.com</a>

secure.someurl.com/track/AAAAAA4wLjAuMC4w дает <a class="actionLink" href="http://secure.someurl.com/track/AAAAAA4wLjAuMC4w">secure.someurl.com</a>

и, наконец, refer.ccbill.com дает <a class="actionLink" href="http://refer.ccbill.com">refer.ccbill.com</a>.

1 голос
/ 08 апреля 2011

Как насчет:

шаблон поиска:

(?:https?://)?(((\w+\.)+\w{2,6})(/.*)?)

заменить

<a class="actionLink" href="http://\2">\1</a>
1 голос
/ 08 апреля 2011
0 голосов
/ 08 апреля 2011

http://regexlib.com/DisplayPatterns.aspx будет спасателем для меня в большинстве требований регулярных выражений.

Попробуйте это

0 голосов
/ 25 марта 2011

Дайте этому попытку

(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&amp;%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&amp;%\$#\=~_\-]+))
0 голосов
/ 25 марта 2011

Ваше регулярное выражение только evaluetsn URL, которые являются такими длинными:

http://secure.someurl.com

Если вы хотите оценить часть после URL, как

/track/AAAAAA4wLjAuMC4w  

, вы должны добавить что-то вроде "\. * "(без кавычек) до конца регулярного выражения, поэтому оно должно быть

'((http(s)?://)?((www\.)?\w+\.\w{2,6})\.*)'

(я не проверял это)

С уважением, Стефан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...