किसी वेबपृष्ठ से लिंक पार्स करने के लिए नियमित अभिव्यक्ति?

मैं एक .NET नियमित अभिव्यक्ति की तलाश कर रहा हूं, जो कि वेबपृष्ठ से सभी यूआरएल निकाले हैं लेकिन एक लिंक को निर्दिष्ट करने के सभी अलग-अलग तरीकों को कवर करने के लिए पर्याप्त व्यापक नहीं पाया है।

और एक पक्ष सवाल:

क्या उन सभी पर शासन करने के लिए एक regex है ? या क्या मैं कम जटिल नियमित अभिव्यक्तियों की एक श्रृंखला का उपयोग करके और कच्चे HTML के खिलाफ मल्टीप्ली पास का उपयोग कर बेहतर हूं? (स्पीड बनाम रखरखाव)

0
ro fr bn
अनिवार्य संदर्भ stackoverflow.com/questions/1732348/…
जोड़ा लेखक RCIX, स्रोत

9 उत्तर

रेगेक्सबड्डी लाइब्रेरी से:

यूआरएल: पूर्ण पाठ में खोजें

अंतिम चरित्र वर्ग यह सुनिश्चित करता है कि यदि कोई यूआरएल कुछ पाठ का हिस्सा है, तो यूआरएल के बाद कॉमा या पूर्ण स्टॉप जैसे विराम चिह्न को यूआरएल के हिस्से के रूप में व्याख्या नहीं किया जाता है।

\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]

0
जोड़ा

यूआरएल? छवियों / स्क्रिप्ट / सीएसएस / आदि में के रूप में?

<�कोड>% href = "(। ["] *) "%

0
जोड़ा

सभी HTTP और मेलो के

(["'])(mailto:|http:).*?\1

सभी लिंक, जिनमें रिश्तेदार शामिल हैं, जिन्हें href या src द्वारा बुलाया जाता है।

#Matches things in single or double quotes, but not the quotes themselves
(?<=(["']))((?<=href=['"])|(?<=src=['"])).*?(?=\1)

#Maches thing in either double or single quotes, including the quotes.
(["'])((?<=href=")|(?<=src=")).*?\1

दूसरा, आपको केवल लिंक मिलेगा जो डबल कोट्स का उपयोग करते हैं।

0
जोड़ा

मेरे पास एक रेगेक्स की कोशिश करने और सोचने का समय नहीं है जो शायद काम नहीं करेगा, लेकिन मैं टिप्पणी करना चाहता था कि आपको निश्चित रूप से अपने रेगेक्स को तोड़ना चाहिए, कम से कम अगर यह कुरूपता का यह स्तर :

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
....*SNIP*....
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)

(यह माना जाता है कि ईमेल पते से मेल खाता है)

संपादित करें: मैं इसे एक पोस्ट पर भी फिट नहीं कर सकता, यह बहुत बुरा है ....

0
जोड़ा
((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)

I took this from regexlib.com

[संपादक का नोट: इस रेगेक्स में {1} का कोई वास्तविक कार्य नहीं है; यह पोस्ट देखें ]

0
जोड़ा

एचटीएमएल एजिलिटी पैक के साथ, आप इसका उपयोग कर सकते हैं:

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//[email protected]")
{
Response.Write(link["href"].Value;
}
doc.Save("file.htm");
0
जोड़ा
लाइन 5 पर सिंटेक्स त्रुटि
जोड़ा लेखक anonymous coward, स्रोत

यूआरआई विनिर्देश देखें। इससे आपको बहुत मदद मिल सकती है। और जहां तक ​​प्रदर्शन चलता है, आप एक सामान्य वेब पेज में सभी HTTP लिंक को बहुत अधिक निकाल सकते हैं। जब मैं मामूली कहता हूं तो निश्चित रूप से इसका मतलब यह नहीं है कि ईएलआईएसपी मैनुअल की तरह एचटीएमएल मैनुअल में एक पृष्ठ शामिल है। प्रदर्शन भी एक स्पर्श विषय है। मेरी सलाह आपके प्रदर्शन को मापने के लिए होगी और फिर तय करें कि क्या आप एक ही रेगेक्स का उपयोग करके या कई सरल रेगेक्स अभिव्यक्तियों के साथ सभी लिंक निकालने जा रहे हैं।

http://gbiv.com/protocols/uri/rfc/rfc3986.html

0
जोड़ा

जब तक एचटीएमएल के लेखक उद्धरण उद्धृत करते हैं, तब तक यह सभी टैगों से यूआरएल को कैप्चर करेगा:

]+href="([^"]+)"[^>]*>

मैंने एक उदाहरण यहां किया है।

0
जोड़ा

according to http://tools.ietf.org/html/rfc3986

किसी भी पाठ से यूआरएल निकालना (न केवल HTML)

(http\\://[:/?#\\[\\]@!%$&'()*+,;=a-zA-Z0-9._\\-~]+)
0
जोड़ा
क्या वह उन URL से मेल खाता है जो https: // या ftp: // से शुरू होते हैं?
जोड़ा लेखक andrewsi, स्रोत