php - regex मेलिंग लिंक बिना<a> टैग




hyperlink anchor (2)

(http([s]?):\/\/?)(([a-zA-Z0-9]+(\.?))+)([a-zA-Z0-9]+((\.[a-zA-Z]{2,5}){1,2})((\/[a-zA-Z0-9\?&=_\-\~:/?#[\]@!\$&'()\*\+,;]*)*)((\.[a-zA-Z]{2,5}){0,2}))

यह मेरा regex है जो स्ट्रिंग में लिंक से मिलान करने के लिए अच्छी तरह से काम कर रहा है। लेकिन मैं नहीं चाहता कि वह हर लिंक का चयन करे। यदि कोई लिंक उसके पहले "> या उसके बाद" है, तो उस लिंक को गणित नहीं किया जाना चाहिए। यह कैसे किया जा सकता है?

ये मिलान होना चाहिए:

adasdas http://www.stackoverflow.com asdasas
adasdasahttp://www.stackoverflow.com/something asdas

इन्हें मिलान नहीं किया जाना चाहिए:

adasdas<a href="somelink">           http://www.stackoverflow.com     </a>asdasas
adasdasa<a href="somelink">http://www.stackoverflow.com/something</a> asdas

मुझे इसकी आवश्यकता क्यों है ?: मैं चाहता हूं कि हर लिंक क्लिक करने योग्य हो, भले ही यह एंकर टैग्स के बीच न हो।



एचईएल को पार्स करने के लिए regex का उपयोग करने के बारे में सभी अस्वीकरण के साथ, यदि आप इस कार्य के लिए regex का उपयोग करना चाहते हैं, तो यह काम करेगा:

$regex="~<a.*?</a>(*SKIP)(*F)|http://\S+~";

डेमो देखें

इस समस्या को इस प्रश्न में समझाया जाने वाला तकनीक का एक क्लासिक मामला है, "बिना किसी पैटर्न को फिर से इकट्ठा करना, को छोड़कर ..."

प्रत्यावर्तन की बाईं तरफ | पूरी तरह से <a ...tags </a> मेल खाता है तो जानबूझकर विफल हो जाता है, जिसके बाद इंजन स्ट्रिंग में अगली स्थिति को छोड़ देता है। सही पक्ष यूआरएल से मेल खाता है, और हम जानते हैं कि वे सही हैं क्योंकि वे बाईं ओर अभिव्यक्ति से मेल नहीं खाए थे।

Url regex मैं सही पर डाल दिया और परिष्कृत किया जा सकता है, बस अपनी आवश्यकताओं के अनुरूप है जो भी उपयोग करें।

संदर्भ





anchor