我從db中收到一段代碼,偶爾會包含url,例如,http://site.tld/lorem.ipsum/whatever
現在我想用輔助方法將它變成用戶的良好可點擊鏈接。如:內容URL正則表達式
<a href="http://site.tld/lorem.ipsum/whatever">http://site.tld/lorem.ipsum/whatever</a>
當然,任何人都可以做到這一點,[^\s]+
是訣竅。但是顯而易見的問題是,如果我有一個點(。),例如在URL後面,我不希望它包含在鏈接中。因此,我們需要將URL限制爲多個字符,但是我們不能創建一個匹配不是特定字符的字符的規則,因爲前面提到的點是「url終止符」,但它也可以是包含在URL中。 我的第一個猜測這是什麼:
(http\:\/\/[^\s]+)(\,|\.|\;|\:)?
這將被替換爲
<a href="$1">$1</a>$2
但它不工作,因爲第二個變量容器是可選的,它似乎是最好的這些字符是包括在第一個中,因爲除了空格字符之外,任何東西都是允許的。
我真的很感謝你的幫助,但老實說,我不想在互聯網上找到一個巨大的規則,這似乎在目前工作。我確信有一個很酷的方式來獲得這個。我對正則表達式有一個體面的理解,但這種情況似乎是我以前沒有經歷過的。或者,也許我錯過了一些東西,畢竟它已經過了凌晨3點。
謝謝!
編輯:
@Chirael清除它爲我,但這裏是我最終的解決方案:
(http\:\/\/[^\s]+?)(\,|\.|\;|\:)?(\s|$)
- 我,因爲我使用PHP
- 我清除斜槓在第二個變量中添加了更多字符作爲「URL停止符」
- 由於第一個變量變爲「非貪婪」,而第二個變量是可選的,所以如果未指定第三個變量,在「http://」後面加上第一個字符。但是當URL是文本中的最後一個東西時出現問題,所以現在第三個變量可以是空格字符或文本的結尾。
輝煌!我知道必須有這樣的概念。當你說「讓它不貪婪」時,我的心就在增長。那正是我所期待的。我記得以前我用過這個,但現在我覺得我的啓發不大。你知道我在哪裏可以找到關於這個想法的東西,以確保我100%知道它的工作原理嗎?再次感謝! – treznik 2009-11-25 01:57:57
太棒了 - 如果這回答了您的問題,您是否介意點擊複選標記以「接受」它?我是新的網站,並已被吸引到這整個「信譽評分」的事情;)(謝謝:) – Chirael 2009-11-25 01:59:00
哦,至於貪婪或非貪婪的想法,我沒有一個規範的來源,在20世紀90年代中期,我學習了有關正則表達式的知識,當時Perl是該語言,CGI是該做的事情(早在Perl 4的鼎盛時期)。所以我能推薦的唯一東西是「man perlre」,儘管我相信O'reilly有一本關於正則表達式的書,可能值得瀏覽。 – Chirael 2009-11-25 02:00:13