2011-02-25 36 views
0

我想用正則表達式替換字符串中的url。問題是該字符串可以包含「\ n」。例如,不接受「 n」的URL的正則表達式

http://www.google.com \ n

和\ n是一個新行。該字符串從textarea收集。任何人都可以請幫我找到一個匹配url的正則表達式,並知道\ n不是url的一部分。

編輯,

一個我已經試過正則表達式,

@"(?<!<\s*(?:a|img)\b[^<]*)(\b(?:(?:http|https|ftp|file)://|www\.)[^ |\\]+\b)" 

r.Replace(text, "<a href=\"$1\" target=\"&#95;blank\">$1</a>") 

R =我正則表達式對象和文字是我想用一個超鏈接替換URL輸入。

+2

到目前爲止,你的正則表達式是什麼?你有沒有解決它的字符串\ n,如果是的話,你添加\ n的問題是什麼? – Chris 2011-02-25 16:07:50

+0

你有一個網址收集或在該文本區域中的許多網址? – xanatos 2011-02-25 16:26:20

+0

看到我上面的編輯.. 問題是,如果我的文字包含http://www.google。com \ n的超鏈接結果是這樣的, 「http://www.google.com\n Nordis 2011-02-25 16:26:55

回答

1

只要將\ n添加到您現有的正則表達式中,該怎麼辦?

@"(?<!<\s*(?:a|img)\b[^<]*)(\b(?:(?:http|https|ftp|file)://|www\.)[^ |\\\n]+\b)" 

0

你可以嘗試像...

(http://)|(https://)?(www.)(\w)+(.)(\w)+ 

因爲\不適用於它在\ n停止匹配單詞字符。

+0

Thanx,但正則表達式必須處理更多合適的網址,比如querystrings .. – Nordis 2011-02-25 16:29:36

+0

@Nordis,啊,是啊,我從你的編輯看到,不能責怪一個人嘗試! – Shaded 2011-02-25 16:30:28

+0

當然不是,我得到的所有幫助都非常感謝!:-) – Nordis 2011-02-25 16:35:01

0

我已經https://stackoverflow.com/users/53104/smazy

發現了一個建議,如果你想匹配直到字符串的結尾處,而忽略休息的任意行\ Z^

正則表達式的regex =新正則表達式(@「^ [一-z0-9] + \ z「,RegexOptions.Multiline);

這是爲MutliLine和SingleLine都沒關係。

0

爲什麼不寫一個合適的正則表達式,從規範中構建?抓住RFC,並建立正則表達式了,就像他們在RFC建立的定義:

http://www.ietf.org/rfc/rfc1738.txt

所以,作爲開始:

方案= @ 「HTTP | https」 開頭 ... scheme-specific =「//」+ user +「:」+ password「+」@「+ host +」:「port +」/「+ url-path url = scheme +」:「+ scheme-specific

當然,這是一項很多工作,但你肯定你不會錯過任何案例。仔細想一想這是非常重要的在數據接受(因爲你目前的版本似乎也是XSS易發生的)(http://jehiah.cz/a/xss-stealing-cookies-101

任何不足之處,你需要一次又一次回來,因爲還有這個小東西你後來發現...