2016-04-15 90 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

相關問題