2016-12-15 85 views
1

我試圖解析從純文本鏈接,我碰到這個非常有用的網站來了:Android - 如何使用正則表達式檢測純文本的URL?

http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without

有該正則表達式匹配的URL使用的例子,但是我有一些麻煩它周圍的語法。

什麼是這個在Java中的等價物:

$(function() { 
    var urlRegEx = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w][email protected])?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w][email protected])[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/g; 
    $('#target').html($('#source').html().replace(urlRegEx, "<a href='$1'>$1</a>")); 
}); 

任何幫助或解決方案將是非常appreaciated。

我知道在Java中的PatternMatcher類,但我不知道jquery的.html()爲了實現一個解決方案。提前致謝。

+1

爲什麼使用模式和匹配器,如果你需要更換?使用'String res = input_str.replaceAll(regex,「$1」);'。正則表達式是相同的,只是刪除最初和最後一個'/'和其他兩個反斜槓('[']''中的反斜槓都可以被刪除,除了'\ w')。 –

回答

2

你並不需要使用PatternMatcher直接,如果你需要更換匹配的字符串,使用String#replaceAll

String input_str = "http://www.some.site.com?and=value&s=more\nhttp://10.23.46.134\[email protected]"; 
String regex = "(([A-Za-z]{3,9}:(?://)?)(?:[-;:&=+$,\\w][email protected])?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w][email protected])[A-Za-z0-9.-]+)((?:/[+~%/.\\w-]*)?\\??(?:[-+=&;%@.\\w]*)#?(?:[.!/\\\\\\w]*))?"; 
String res = input_str.replaceAll(regex, "<a href='$0'>$0</a>"); 
System.out.println(res); 
// => 
// <a href='http://www.some.site.com?and=value&s=more'>http://www.some.site.com?and=value&s=more</a> 
// <a href='http://10.23.46.134'>http://10.23.46.134</a> 
// <a href='[email protected]'>[email protected]</a> 

正則表達式是相同的,只是刪除的初始和最後/g改性劑和雙其他反斜槓(和內部[...]那些反斜槓都可以除了\w移除)。由於您可以使用$0反向引用來訪問替換模式中的整個匹配值,因此可以刪除外部捕獲組。

請參閱regex demoJava demo

+0

非常感謝,這真的很有用。我也試圖避免在最終的String中包含任何屬性標籤。這應該使用URLSpan來完成嗎? – user1841702

+0

你說你打算用純文本來使用它。什麼樣的屬性標籤你的意思是? –

+0

我只想突出顯示鏈接本身並使其可點擊,如下所示:http://jsbin.com/wotinulonu/edit?html,js,輸出時不包含周圍的屬性標記。右邊的演示是我理想想要實現的。 – user1841702

0

你可以做這樣的事情(調整正則表達式來滿足您的需求):

String originalString = "Please go to http://www.stackoverflow.com"; 
String newString = originalString.replaceAll("http://.+?(com|net|org)/{0,1}", "<a href=\"$0\">$0</a>"); 
相關問題