【发布时间】:2013-05-03 15:51:11
【问题描述】:
感谢 dfowler 出色的 Jabbr 项目,我正在借用代码来嵌入用户帖子中的链接内容。代码来自here,并使用正则表达式提取 URL 以进行额外处理和嵌入。
在我的例子中,我首先通过 Markdown 处理器运行用户帖子,然后再尝试嵌入。如果用户正确格式化 markdown,markdown 处理器 (MarkdownDeep) 会将任何给定的图像 markdown 转换为有效的 HTML img 标签。这很好用,但是,使用嵌入式内容提供程序会使图像出现两次,因为它从降价转换中有效显示,然后也被嵌入。
所以,我相信解决我的问题的方法在于,当找到的 URL 已包含在有效的 img 标记中时,将正则表达式更改为不匹配。
到目前为止,为了便于回答正则表达式是:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'"".,<>?«»“”‘’]))
我想我想像this answer 那样使用负前瞻来排除img,但是我在正则表达式语法方面太差了,无法自己实现它。
注意:如果图像仅出现在文本中,我希望它仍然匹配图像。所以http://www.example.com/sites/default/files/DellComputer.jpg 会匹配
或在超链接中<a href='http://www.example.com/sites/default/files/DellComputer.jpg'> 匹配但<img src='http://www.example.com/sites/default/files/DellComputer.jpg'> 不匹配。
感谢您的帮助,我知道你们中的一些人有专家级的正则表达式才能,但我永远做不到。
【问题讨论】:
-
图像是具有特定扩展名的东西,还是您想要二进制检查?
-
无二进制检查。无论是否包含图像,都匹配 URL,但如果包含在 html img 标记中,则排除 URL。
-
处理并删除
img标签,然后将其余部分作为 URL 进行匹配。在一个正则表达式中做太多事情只会使编写、调试和维护变得不必要地复杂。 -
这是一个巨大的正则表达式。那将完全匹配什么?您提供的网址至少都不匹配。
-
@nhahtdg,这可能是更好的解决方法。如果正则表达式方法失败了,我会搞砸的。
标签: c# regex markdowndeep