我正在编写的一个系统使用Markdown来修改链接,但我也希望激活普通链接,这样键入http://www.google.com就可以成为活动链接。为此,我使用正则表达式替换来查找urls,并用Markdown语法重写它们。问题是我不能让正则表达式也解析已经在Markdown语法中的链接。
我使用了以下代码:
$value = preg_replace('@((?!\()https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '[$1]($1)', $value);这适用于普通链接,如http://www.google.com,但我需要它忽略已在Markdown格式中的链接。我认为小节(?!() )会阻止它匹配括号后面的urls,但似乎我错了。
我意识到即使这也不是一个理想的解决方案(如果它有效的话),但这超出了我的正则表达式能力。
发布于 2009-03-27 15:18:35
我想(?<!\()就是你想要的。如果匹配位置在http://www.google.com的开头,那么您需要检查的不是下一个字符,而是前一个字符。换句话说,你需要负向后看,而不是负向向前看。
发布于 2009-03-27 15:23:41
正则表达式在这种事情上是出了名的不好,你可能会得到各种你从未想过的聪明的html漏洞。我认为你应该修改markdown脚本来标记看到的markdown URL,这样当你用一个非常简单的搜索找到所有标记的URL时,你就可以忽略它们,而不会留下太多的麻烦。
https://stackoverflow.com/questions/690069
复制相似问题