我必須找到與正則表達式文本中的第一網址:正則表達式來找到URL文本
例如:
I love this website:http://www.youtube.com/music it's fantastic
或
[ es. http://www.youtube.com/music] text
我必須找到與正則表達式文本中的第一網址:正則表達式來找到URL文本
例如:
I love this website:http://www.youtube.com/music it's fantastic
或
[ es. http://www.youtube.com/music] text
你可以用」用正則表達式完美地做到這一點。您可能對this blog post感興趣。 Regex Guru有一些信息,但即使那些看起來很脆弱。您需要在正則表達式之外進行其他檢查以捕獲邊緣案例。
我認爲這將是更準確的說你不能完全*這樣做,你不能用正則表達式*單獨做*。 FWIW,Stack Overflow的WMD編輯器使用了類似的解決方案,以便Jeff Atwood在第一個鏈接中描述的解決方案使用正則表達式和各種檢查的組合。就像我說的那樣,它不可能是完美的,但是由於缺乏更好的解決方案,您可能會使用與99.9%的時間匹配的東西。 – 2011-03-28 16:14:42
有趣的東西,但我會說,毛毯評論「不能做到這一點」有點強。更像是,「可以做99%的時間」:) – 2011-03-28 16:14:53
我同意你的意見。我編輯了答案來反映這一點。 – syrion 2011-03-28 16:16:03
我在去年調查了這個問題,並開發了一個您可能想看的解決方案 - 請參閱:URL Linkification (HTTP/FTP)此鏈接是Javascript解決方案的測試頁面,其中包含很多難以鏈接的URL示例。
我正則表達式的解決方案,對於PHP和JavaScript編寫的 - 不是簡單的(但也不是問題,因爲它證明。)有關詳細信息,我也會推薦閱讀:
The Problem With URLs由傑夫·阿特伍德和
An Improved Liberal, Accurate Regex Pattern for Matching URLs通過約翰格魯伯
以下Jeff的博客文章的評論是,如果你想這樣做的權利一定要讀...
注意,這個問題被問了很多。也許下次做搜索:)
感謝您提供這些信息,我發現它非常有用。任何機會,你想出了一個類似的強大的regEx,找到沒有領先的'http://'的網址,如'www.example.com'?. – mksuth 2011-08-25 21:38:48
@mksuth - 在上面的鏈接中查看John Gruber的正則表達式。它會捕獲沒有'http://'的URL。 – ridgerunner 2011-08-28 05:26:09
識別URL是非常棘手的,因爲它們通常被標點符號包圍,並且用戶經常不使用完整的URL形式。現在有很多JavaScript函數可以用超鏈接代替URL,但我找不到一個和基於Python的Web框架Django中的urlize
過濾器一樣好的JavaScript函數。因此,我將Django的urlize
函數移植到JavaScript中:https://github.com/ljosa/urlize.js
實際上,在您的示例中實際上不會選擇該URL,因爲URL的前面有一個冒號。但是,如果我們修改的例子一點:
urlize("I love this website: http://www.youtube.com/music it's fantastic", true, true)
=> 'I love this website: <a href="http://www.youtube.com/music" rel="nofollow">http://www.youtube.com/music</a> it's fantastic"'
注意第二個參數,如果屬實,插入rel="nofollow"
第三個參數,如果屬實,報價有在HTML特殊含義的字符。
這可能與工作>
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
發現它的地方
可以鏈接 - >
(喜歡的東西http://foo.com/blah_blah)
http://foo.com/blah_blah_(wikipedia)
希望這個工程....
爲我所需要的工作,謝謝。 – chrisco 2013-08-25 22:44:08
我使用這個表達式::)(其翻譯ABNF)
[a-zA-Z]([a-zA-Z]|[0-9]|\+|\-|\.)*:\/\/((([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:)*@)?(\[((([0-9A-Fa-f]{1,4}:){6}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9]))|::([0-9A-Fa-f]{1,4}:){5}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9]))|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9]))|(([0-9A-Fa-f]{1,4}:){0,1}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9]))|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9]))|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9]))|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9]))|(([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|v[0-9A-Fa-f]\.(([a-zA-Z]|[0-9]|-|\.|_|~)|[!$&'\(\)\*\+,;=]|:))\]|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])|(([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=])*)(:[0-9]*)?(((\/(([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:|@)*)*|\/((([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:|@){1}(\/(([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:|@)*)*)?|(([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:|@){1}(\/(([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:|@)*)*|(([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|@){1}(\/(([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:|@)*)*))?\/?(\?((([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?(\#((([a-zA-Z]|[0-9]|-|\.|_|~)|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?
您可以使用下面的正則表達式,用於提取任何類型的URL的消息來了。
String regex = "(http(s)?:\/\/.)?(www\.)?[[email protected]:%._\+~#=]{2,256}\.[a-z]{2,6}\b([[email protected]:%_\+.~#?&/=]*)";
較早的一個不工作? – The90sArtist 2017-05-17 11:41:51
這是你的問題的PHP版本:從字符串中提取URL](http://stackoverflow.com/questions/4390556/extract-url-from-string) – 2011-03-28 16:01:36