2010-01-08 3 views
10

मैंने Liberal URL Regex from Daring Fireball लिया है, इसे some of Alan Storm improvements के साथ विलय कर लिया है और कुछ बग फिक्स करने में अपना रास्ता हैक किया है जैसे कि आईडीएन वर्णों को ब्रांड्स के अंदर समर्थन के लिए।सहायता हैकिंग ग्रबर के लिबरल यूआरएल रेगेक्स

/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/ 

हालांकि मैं एक बग है कि मैं हल करने में सक्षम नहीं किया जा रहा हूँ का सामना किया है::

'www.dsd(sd)sdsd.com' // can also be the valid 'www.dsd.com/whatever(whatever)' 

ऊपर URL www.dsd(sd)sdsd.com' (या www.dsd.com/whatever(whatever)') के रूप में पहचाना जा रहा है यह मैं क्या है है www.dsd(sd)sdsd.com (या www.dsd.com/whatever(whatever)) के बजाय। यह केवल जब यूआरएल कोष्ठक हैं होने के लिए, निम्न URL के बाद से लगता है:

'www.sampleurl.com' 

सही ढंग से www.sampleurl.com रूप में मान्यता प्राप्त किया जा रहा है।

मुझे लगता है कि regex के [^[:punct:]\s]|\/ हिस्सा निष्पादित किया जा रहा नहीं है जब यूआरएल कोष्ठकों, मैं कुछ समय के लिए कोशिश कर रहा है, लेकिन मैं एक समाधान खोजने के लिए नहीं कर पा रहे है। क्या कोई मेरी मदद कर सकता है?

कमोडिटी के लिए, मैंने Rubular permalink with the regex and some test data (अंतिम URL विफल) स्थापित किया है।


मुझे लगता है कि Gruber के regex एक छोटे से ले जाया गया, उदाहरण के लिए यह मेल नहीं खाता यूआरएल की तरह:

http://en.wikipedia.org/wiki/Something_(Special)_For_You 

मैं और भी अधिक प्रभावित देखकर कि दोनों Gruber और Alan यह वास्तव में याद किया द्वारा हूँ सरल टाइपो:

\([\w\d]+\) 

पर्याप्त नहीं \(\w+\) होगा? : एस

उत्तर

1

www.dsd (sd) sdsd.com मान्य डोमेन नाम नहीं है।

यदि आपके पास 'www.dsd.com/whatever(whatever)' था, तो यह सही ढंग से पहचाना जाएगा। (या कम से कम मेरी परीक्षणों में है)

+0

यह भी काम नहीं कर रहा है (http://www.rubular.com/regexes/12851)। –

+0

एचएम, सच। मैंने मूल डियरिंग फायरबॉल अभिव्यक्ति का उपयोग करके परीक्षण किया (जिसे मैं स्वयं उपयोग करता हूं)। मैं एक रेगेक्स विशेषज्ञ नहीं हूं, इसलिए किसी भी अन्य समाधान के लंबित, मैं एलन स्टॉर्म के सुधारों को हटा दूंगा (क्योंकि मुझे विश्वास है कि वे बेकार/अनावश्यक हैं) –

+0

साहसी फायरबॉल अभिव्यक्ति केवल 0-9 ए-जेड को ब्रांड्स के अंदर मेल करती है। –

1
/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/ 
    www.     |    |   | 
          dsd   |   | 
              (sd)  | 
                 sdsd.com' 

है कि कैसे मैं इस ... एक भाग निकले खुला कोष्ठक के साथ शुरू होता है (sd) ऊपर regex का सा है, तो एक stared वर्ण वर्ग sd मिलान, तो एक टूट जाती है लगता है बंद होने वाले माता-पिता से बच निकला, और अगली बात [^\s()<>]* है जो sdsd.com' से मेल खाती है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^