我不喜欢正则表达式。我试图理解它,但这很难。
我有一个正则表达式,它会将任何URL包装在一个锚标记中。但是,它还包含已经存在于锚标记中的URL。我想阻止这一点,所以我找到了一个正则表达式,它为我做了这个。
?![^<]*</a>
但是,我不知道如何将其添加到现有的正则表达式中。这是我目前的正则表达式:
preg_replace('!(((ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1" target="_blank">$1</a>', $text); ?>
那么,我如何跳过已经包含在锚标记中的URL?
答案 0 :(得分:1)
我要加入合唱团并说:不要使用正则表达式 - 使用html解析器。
这就是说 - 你找到的正则表达式本身并不是一个真正的正则表达式。这是种类检查你不在锚中的负面预测的一部分。 (它应该是(?![^<]*</a>)
。)它会检查下一个<
(或结尾)后面的文字是否后跟</>
。
将此附加到原始RE的en 有时可以做到这一点。我不会花时间思考它会失败的情况 - 但它可能会失败。
除了一些简化之外,你的正则表达式应如下所示:
(https?:\/\/[-\wа-яА-Я()@:%+.~#?&;\/=]+)(?![^<]*<\/a>)
这可能适合你 ,但也可能会失败。
此致