将另一个正则表达式添加到现有表达式

时间:2016-04-15 07:05:24

标签: php regex preg-replace

我不喜欢正则表达式。我试图理解它,但这很难。

我有一个正则表达式,它会将任何URL包装在一个锚标记中。但是,它还包含已经存在于锚标记中的URL。我想阻止这一点,所以我找到了一个正则表达式,它为我做了这个。

?![^<]*</a>

但是,我不知道如何将其添加到现有的正则表达式中。这是我目前的正则表达式:

preg_replace('!(((ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1" target="_blank">$1</a>', $text); ?>

那么,我如何跳过已经包含在锚标记中的URL?

1 个答案:

答案 0 :(得分:1)

我要加入合唱团并说:不要使用正则表达式 - 使用html解析器

这就是说 - 你找到的正则表达式本身并不是一个真正的正则表达式。这是种类检查你不在锚中的负面预测的一部分。 (它应该是(?![^<]*</a>)。)它会检查下一个<(或结尾)后面的文字是否后跟</>

将此附加到原始RE的en 有时可以做到这一点。我不会花时间思考它会失败的情况 - 但它可能会失败。

除了一些简化之外,你的正则表达式应如下所示:

(https?:\/\/[-\wа-яА-Я()@:%+.~#?&;\/=]+)(?![^<]*<\/a>)

这可能适合你 ,但也可能会失败。

此致