में नकारात्मक दिखने और लालची क्वांटिफायर मैं किसी भी यूआरएल को खोजने और उन्हें तदनुसार जोड़ने के लिए रेगेक्स का उपयोग कर रहा हूं। हालांकि, मैं पहले से जुड़े किसी भी यूआरएल को लिंक नहीं करना चाहता हूं, इसलिए मैं यह देखने के लिए देख रहा हूं कि यूआरएल में इससे पहले एक href है या नहीं। यह विफल रहता है क्योंकि चरम लंबाई में क्वांटिफ़ायर की अनुमति नहीं है और PHP के लिए देखो।php
/\b(?<!href\s*=\s*[\'\"])((?:http:\/\/|www\.)\S*?)(?=\s|$)/i
इस समस्या को हल का सबसे अच्छा तरीका क्या है:
यहाँ मैच के लिए regex है?
संपादित करें:
मैं अभी तक यह परीक्षण करने के लिए है, लेकिन मैं एक भी regex में यह करने के लिए चाल regex, जो PCRE द्वारा समर्थित है के भीतर सशर्त भाव उपयोग कर रहा है लगता है। यह कुछ इस तरह दिखेगा:
/(href\s*=\s*[\'\"])?(?(1)^|)((?:http:\/\/|www\.)\w[\w\d\.\/]*)(?=\s|$)/i
प्रमुख मुद्दा यह है कि अगर href कब्जा कर लिया है, मैच तुरंत बाहर सशर्त (?(1)^|)
, जो मेल नहीं करने की गारंटी है की वजह से फेंक दिया जाता है। शायद इसमें कुछ गड़बड़ है। मैं कल इसका परीक्षण करूंगा।
उम, एक HTML पार्सर का उपयोग करें और केवल टेक्स्ट नोड होने पर लिंक करें? – kennytm
शायद यह सबसे अच्छा समाधान है। मैं यह देखने के लिए उत्सुक था कि यद्यपि रेगेक्स को समायोजित करने का कोई तरीका था या नहीं। –
+1 अच्छा सवाल है। – NikiC