我正在尝试用正则表达式替换字符串中的url。问题是字符串可以包含“\ n”。例如,
\ n \ n是换行符。该字符串是从textarea收集的。任何人都可以帮我找到一个匹配网址的正则表达式,并知道\ n不是网址的一部分。
编辑,
我试过的一个正则表达式,
@"(?<!<\s*(?:a|img)\b[^<]*)(\b(?:(?:http|https|ftp|file)://|www\.)[^ |\\]+\b)"
r.Replace(text, "<a href=\"$1\" target=\"_blank\">$1</a>")
r = My Regex对象和文本是我想用超链接替换URL的输入。
答案 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)
任何不足之处,你都需要一次又一次地回来,因为你后来发现了另一件小事......