我正在使用正则表达式来查找任何 URL 并相应地链接它们。但是,我不想链接任何已经链接的 URL,所以我使用后向查看 URL 之前是否有 href。但是这失败了,因为在 PHP 的前瞻和后瞻中不允许使用可变长度量词。
这是比赛的正则表达式:
/\b(?<!href\s*=\s*[\'\"])((?:http:\/\/|www\.)\S*?)(?=\s|$)/i
解决这个问题的最佳方法是什么?
编辑:
我还没有对其进行测试,但我认为在单个正则表达式中执行此操作的诀窍是在正则表达式中使用条件表达式,这由 PCRE 支持。它看起来像这样:
/(href\s*=\s*[\'\"])?(?(1)^|)((?:http:\/\/|www\.)\w[\w\d\.\/]*)(?=\s|$)/i
关键是如果href被抓到了,由于有条件的,会立即抛出匹配(?(1)^|)
,保证不匹配。它可能有什么问题。我明天测试一下。