2010-06-08 13 views
9

मेरे पास एक बहुत ही सरल रेगेक्स प्रश्न है। मान लीजिए मैं 2 शर्तें हैं:बहुत सरल रेगेक्स प्रश्न

  1. url = http://www.abc.com/cde/def
  2. url = https://www.abc.com/sadfl/dsaf

मैं regex का उपयोग कर baseurl कैसे निकाल सकते हैं?

नमूना उत्पादन:

  1. http://www.abc.com
  2. https://www.abc.com
+1

यह सिर्फ होमवर्क – Gyom

+4

@Gyom तरह लग रहा है इस होमवर्क की तरह कुछ भी लग रहा है –

उत्तर

8

इस तरह:

String baseUrl; 
Pattern p = Pattern.compile("^(([a-zA-Z]+://)?[a-zA-Z0-9.-]+\\.[a-zA-Z]+(:\d+)?/"); 
Matcher m = p.matcher(str); 
if (m.matches()) 
    baseUrl = m.group(1); 

हालांकि, अगर आप इस तरह के बजाय URI class का उपयोग करना चाहिए,:

URI uri = new URI(str); 
+0

अपने त्वरित प्रतिक्रिया के लिए धन्यवाद लेकिन यह https देता है: // www.abc.com sadfl क्या यह संभव है कि यह केवल पहले एक https://www.abc.com – Sunil

+0

आपको बहुत धन्यवाद। यह यूआरआई कक्षा के लिए – Sunil

+0

+1 काम कर रहा है। – Aistina

1

/^(https?\:\/\/[^\/]+).*/$1/

यह कुछ भी है जो http के साथ शुरू होता कब्जा और $ 1 के लिए सबसे पहले/के बाद शुरू से ही सब कुछ शामिल होंगे //

+0

अपने त्वरित प्रतिक्रिया के लिए धन्यवाद – Sunil

1

लिखने और फेंक दूर स्क्रिप्ट के अलावा, आप चाहिए हमेशा पार्स करने से बचना चाहिए रेगेक्स का उपयोग कर जटिल वाक्यविन्यास (ई-मेल पते, यूआरएल, एचटीएमएल पेज, इत्यादि)।

मेरा मानना ​​है कि, आप अंततः काट लेंगे।

+0

टिप्पणी के लिए धन्यवाद – Sunil

0

मैं बहुत यकीन है कि वहाँ एक जावा वर्ग उस पथ जोड़तोड़ की अनुमति देगा कि हूँ, लेकिन

https?://[^/]+ 

काम करेगा अगर यह, एक regex हो गया है।

[^/]_//[^/]+ 

यानी: गैर स्लैश (0 या अधिक बार), दो स्लैश, गैर

+0

आपकी प्रतिक्रिया के लिए धन्यवाद सर – Sunil

0

अपने दो विशिष्ट उदाहरण के लिए सरल समाधान की तरह लग रहा पैटर्न होगा (s? भी https: को संभालने के लिए शामिल है) -स्लैश (0 या अधिक बार)। यदि आप चाहें तो आप उससे कठोर हो सकते हैं, क्योंकि दो मौजूदा उत्तर अलग-अलग तरीकों से कर रहे हैं - एक अस्वीकार कर देगा। यूआरएल ftp: से शुरू हो रहा है, दूसरा अंडरस्कोर के साथ डोमेन को अस्वीकार कर देगा (लेकिन बिना किसी अग्रणी protocol:// के यूआरएल स्वीकार करेगा, जिससे उस सम्मान में मेरा भी व्यापक होगा)। इस प्रकार के उत्तरों (सभी सही wrt आपके scant specs ;-) आपको यह सुझाव देना चाहिए कि आपकी चश्मा बहुत अस्पष्ट हैं और उन्हें कड़ा होना चाहिए।

+0

आपकी त्वरित प्रतिक्रिया के लिए धन्यवाद सर – Sunil

0

यहां एक रेगेक्स है जो दी गई समस्या को पूरा करना चाहिए।

https?://[^/]* 

मुझे लगता है कि आप इसे आंशिक रूप से रेगेक्स के अधिक ज्ञान प्राप्त करने के लिए कह रहे हैं।

String urlStr = "https://www.abc.com/stuff"; 
URL url = new URL(urlStr); 
String host = url.getHost(); 
String protocol = url.getProtocol(); 
URL baseUrl = new URL (protocol, host); 

यह बेहतर है के रूप में यह है, तो अपने इनपुट यूआरएल अधिक मामलों को पकड़ने चाहिए: अगर, हालांकि, आप एक URL से होस्ट खींचने की कोशिश कर रहे हैं, यह यकीनन अधिक सही जावा के और अधिक मजबूत पार्स तरीकों का उपयोग करने के लिए है ऊपर वर्णित के रूप में सख्त नहीं है।

+0

आपके त्वरित उत्तर सर – Sunil

2

regexp के बिना एक एक लाइनर:

String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2)); 
+0

:) आपके उत्तर के लिए धन्यवाद लेकिन मैं regex का उपयोग करना चाहता हूं – Sunil

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