【问题标题】:Regex for URL that don't accept "\n"不接受“\n”的 URL 的正则表达式
【发布时间】:2011-02-25 16:05:05
【问题描述】:

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

http://www.google.com\n

而 \n 是换行符。该字符串是从文本区域收集的。谁能帮我找到一个与 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 = 我的 Regex 对象和文本是我想用超链接替换 ​​URL 的输入。

【问题讨论】:

  • 到目前为止你的正则表达式是什么?你有没有为没有 \n 的字符串解决它,如果是这样,你添加 \n 的问题是什么?
  • 您是否有一个要收集的网址或该文本区域中有多个网址?
  • 查看我上面的编辑。问题是如果我的文本包含google.com\n 超链接会变成这样,“google.com\n">google.com \n
  • xanatos,字符串可以包含多个 url..
  • 把 [^ |\] 换成 [^ |\\\n]

标签: c# asp.net regex url


【解决方案1】:

在现有的正则表达式中添加 \n 怎么样?

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

?

【讨论】:

    【解决方案2】:

    你可以试试...

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

    因为 \ 对单词字符无效,所以它在 \n 处停止匹配。

    【讨论】:

    • @Nordis,啊,是的,我从您的编辑中看到了这一点,不能责怪一个人尝试!
    【解决方案3】:

    我找到了https://stackoverflow.com/users/53104/smazy的建议

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

    正则表达式 regex = new Regex(@"^[a-z0-9]+\z", RegexOptions.Multiline);

    这对 MutliLine 和 SingleLine 都适用,没关系。

    【讨论】:

      【解决方案4】:

      为什么不根据规范编写一个适当的正则表达式?获取 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

      除此之外的任何事情,你都需要一次又一次地回来,因为还有一个你后来发现的小东西......

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 2015-07-14
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多