2016-04-15 47 views
0

我不是具有正则表达式的家庭成员。我试图理解它,但这很困难。在现有表达式中添加另一个正则表达式

我有一个正则表达式,它将任何URL包裹在锚标记中。但是,它也包装已经在锚标签中的URL。我想阻止这一点,所以我找到了一个正则表达式来为我做这件事。

?![^<]*</a> 

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

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

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

+0

请清除您的问题的更多细节。 –

回答

1

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

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

将此添加到您原来的RE的en将有时做的伎俩。我不会花时间考虑它会失败的情况 - 但它可能会。

随着一些简化您的正则表达式应该是这样的:

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

这可能会为你大多工作,但可能会在次也失败。

Regards

+0

好的,谢谢。我将改为使用HTML解析器。 – stefan1294

相关问题