2012-03-22 2 views
0

может ли кто-нибудь посоветовать, как улучшить приведенное ниже регулярное выражение, чтобы легко преобразовывать гиперссылки в текстовые гиперссылки в гиперссылки html в java?Как преобразовать гиперссылку гипертекста в java?

message = message.replaceAll("(?:https?|http?)://[\\w/%.\\-?&=!#]+(?!.*\\[/)", 
"$0"); 

На самом деле мне интересно, если можно просто проверить, является ли просто конвертировать любой найденный текст с HTTP или HTTPS вместе с текстом добавляющим без интервала вместо проверки этих специальных символов.

Я видел несколько сайтов textareas, которые могут легко конвертировать текстовую гиперссылку в гиперссылку html. Но я исследовал stackoverflow, и я действительно не нашел полного ответа на эту проблему.

Я хочу, чтобы регулярное выражение java позволяло автоматически обнаруживать ссылки и преобразовывать их в гиперссылки html, которые можно щелкнуть.

|http://naishe.blogspot.com| 
|http://tw.com/#!/someTEXTs| 
|http://ts123t1.rapi.com/#!download|13321|1313|fairy_tale.mp4| 
|http://www.google.com| 
|https://www.google.com| 
|google.com| 
|google.com| 
|google.com/test| 
|123.com/test| 
|ex-ample.com| 
|http://ex-ample.com/test-url_chars?param1=val1&;par2=val+with%20spaces| 
https://www.google.com.sg/#hl=en&output=search&sclient=psy-ab&q=test&oq=&aq=&aqi=&aql=&gs_sm=&gs_upl=&gs_l=&psj=1&fp=1&biw=1366&bih=638&bav=on.2,or.r_ gc.r_pw.r_qf.,cf.osb&cad=b 
+0

Являются ли трубы ('|') частью определения ссылки? Если нет, как должна любая программа знать, что 'google.com' будет ссылкой, а не только некоторым текстом, например. ключ или так? - И что вы имеете в виду при преобразовании этих ссылок в html-ссылки? Вы имеете в виду 'http://www.google.com ->http://www.google.com'? Если да, то где проблема, помимо обнаружения ссылок? – Thomas

+0

Хорошо, например. рассмотрите текст кода в моем вопросе. Они могут быть частью текста, введенного пользователем. Значение того, что содержание текста, начинающегося с http или https, должно быть автоматически преобразовано в html-формат гиперссылки. – dfdf

ответ

3

Предполагая http://www.google.com должны быть идентифицированы в качестве ссылки, но www.google.com нет, вы могли бы использовать что-то вроде этого:

String htmlLink = link.replaceAll("(?:https|http)://([\\w/%.\\-?&=!#]+(?!.*\\[/))", 
            "<a href=\"$0\">$1</a>"); 

Выход:

http://www.google.com -> <a href="http://www.google.com">www.google.com</a> 
www.google.com -> www.google.com 

Edit:

Возможно упростить выражение что-то вроде этого:

String pattern = "(?:https|http)://([^\\s\\|]+)"; 

Это выражение будет соответствовать все, что начинается с http или https с последующим :// и последовательность из одного или более символов, которые не являются пробелы или трубы. Если есть другие символы, которые не должны быть разрешены (я не проверял спецификацию, для которых это), просто перечислите их в скобках (между [^] и ]).

+0

Может объяснить, как работает ваше регулярное выражение? – dfdf

+0

@dfdf это в основном ваш с '?' Удален после 'https' и' http', а также дополнительная группа захвата после ': //' (следовательно, '$ 1'). – Thomas

Смежные вопросы