के साथ सादा पाठ से यूआरएल निकालने के लिए रेगेक्स का उपयोग करना मैं सादा पाठ से विशिष्ट एक्सटेंशन के साथ एक विशिष्ट डोमेन (संभवतः परिवर्तनीय सबडोमेन के साथ) के सभी यूआरएल निकालने के लिए पर्ल रेगेक्सप्स का उपयोग कैसे कर सकता हूं? मैंने कोशिश की है:पर्ल
my $stuff = 'omg http://fail-o-tron.com/bleh omg omg omg omg omg http://homepage.com/woot.gif dfgdfg http://shomepage.com/woot.gif aaa';
while($stuff =~ m/(http\:\/\/.*?homepage.com\/.*?\.gif)/gmsi)
{
print $1."\n";
}
यह बुरी तरह विफल रहता है और मुझे देता है:
http://fail-o-tron.com/bleh omg omg omg omg omg http://homepage.com/woot.gif
http://shomepage.com/woot.gif
मैंने सोचा था कि क्योंकि मैं .*?
का उपयोग कर रहा है, जो चाहिए गैर लालची हो सकता है और मुझे सबसे छोटी देने के लिए नहीं होगा मैच। कोई मुझे बता सकता हैं मुझसे क्या गलती हो रही है? (मैं कुछ uber-जटिल, डिब्बाबंद regexp यूआरएल को मान्य नहीं करना चाहता, मैं पता है कि मैं गलत कर रहा हूँ तो मैं इसे से सीख सकते हैं चाहते हैं।)
[RFC 3986 परिशिष्ट सी] (http://tools.ietf.org/html/rfc3986#appendix-C) यूआरआई निकालने की विशेष समस्याओं पर चर्चा करता है, जिसमें व्हाइटस्पेस स्वीकार्य होने पर मामलों सहित। "कुछ मामलों में, अतिरिक्त सफेद जगह (रिक्त स्थान, रेखा-ब्रेक, टैब इत्यादि) को लाइनों में लंबी यूआरआई तोड़ने के लिए जोड़ा जाना पड़ सकता है। जब यूआरआई निकाला जाता है तो व्हाइटस्पेस को अनदेखा किया जाना चाहिए।" और "मजबूती के लिए, उपयोगकर्ता द्वारा टाइप किए गए यूआरआई को स्वीकार करने वाले सॉफ़्टवेयर को दोनों डिलीमीटर और एम्बेडेड व्हाइटस्पेस को पहचानने और पट्टी करने का प्रयास करना चाहिए।" उस अनुभव से, यह मुश्किल है। – Schwern