不接受“\ n”的URL的正则表达式

时间:2011-02-25 16:05:05

标签: c# asp.net regex url

我正在尝试用正则表达式替换字符串中的url。问题是字符串可以包含“\ n”。例如,

http://www.google.com \ n

\ n \ n是换行符。该字符串是从textarea收集的。任何人都可以帮我找到一个匹配网址的正则表达式,并知道\ n不是网址的一部分。

编辑,

我试过的一个正则表达式,

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

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

r = My Regex对象和文本是我想用超链接替换URL的输入。

4 个答案:

答案 0 :(得分:1)

如果只将\ n添加到现有的正则表达式中呢?

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

答案 1 :(得分:0)

您可以尝试类似......

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

因为\对单词字符无效,所以它在\ n。

处停止匹配

答案 2 :(得分:0)

我在https://stackoverflow.com/users/53104/smazy

找到了一条建议

如果要匹配到字符串的最后并忽略任何换行符,请使用\ z

Regex regex = new Regex(@“^ [a-z0-9] + \ z”,RegexOptions.Multiline);

这适用于MutliLine和SingleLine,这无关紧要。

答案 3 :(得分:0)

为什么不编写一个正确的正则表达式,从规范中构建?抓住rfc,构建正则表达式,就像它们在RFC中构建定义一样:

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

所以,作为开始:

scheme = @“http | https” ... scheme-specific =“//”+ user +“:”+ password“+”@“+ host +”:“port +”/“+ url-path url = scheme +“:”+ scheme-specific

当然,这是很多工作,但你确定你不会错过任何案件。并且非常仔细地考虑要接受哪些数据非常重要(因为您当前的版本似乎也容易出现XSS(http://jehiah.cz/a/xss-stealing-cookies-101

任何不足之处,你都需要一次又一次地回来,因为你后来发现了另一件小事......