2012-03-03 4 views
37

से http: // को निकालने के लिए PHP Regex मेरे पास स्ट्रिंग के रूप में पूर्ण URL हैं, लेकिन मैं URL को अच्छी तरह से प्रदर्शित करने के लिए स्ट्रिंग की शुरुआत में http: // को हटाना चाहता हूं (उदा: www.google.com इसके बजाय http://www.google.com)स्ट्रिंग

क्या कोई मदद कर सकता है?

+3

आपको रेगेक्स की आवश्यकता क्यों है? क्यों न केवल पहले 7 अक्षर हटा दें? –

+0

इसे जांचें: http://stackoverflow.com/questions/4875085/php-remove-http-from-link-title – stefandoorn

+0

@ ओली चार्ल्सवर्थ: यह 8 वर्ण भी हो सकता है साथ ही 'https: //' – Sarfraz

उत्तर

111
$str = 'http://www.google.com'; 
$str = preg_replace('#^https?://#', '', $str); 
echo $str; // www.google.com 

कि दोनों http:// और https://

+0

यह चाल है! धन्यवाद! – Casey

+0

@ कैसी: आपका स्वागत है – Sarfraz

+0

किसी ऐसे व्यक्ति से आ रहा है जो रेगेक्स के बारे में पूरी तरह से नहीं जानता है, यह इस समस्या के समाधान को समझने और कार्यान्वित करने में सबसे आसान था, धन्यवाद। –

1

आप रेगुलर एक्सप्रेशन से उपयोग करने पर जोर देते हैं, तो:

preg_match("/^(https?:\/\/)?(.+)$/", $input, $matches); 
$url = $matches[0][2]; 
+2

बस पूर्णता के लिए, मैं http के बाद एक 'एस?' जोड़ना होगा। और हाँ, मुझे पता है कि यह उनके प्रश्न में नहीं था। । । :)) –

+0

अच्छा विचार, अद्यतन। – Overv

3

के लिए काम करेंगे बजाय क्यों parse_url का उपयोग नहीं?

20

आपको नियमित अभिव्यक्ति की आवश्यकता नहीं है। इसके बजाय str_replace का उपयोग करें। इस प्रकार

str_replace('http://', '', $subject); 
str_replace('https://', '', $subject); 

एक भी आपरेशन में संयुक्त:

str_replace(array('http://','https://'), '', $urlString); 
+3

यह http (ओं) के किसी भी बाद के मैचों को भी मिटा देगा: //, जो कोई समस्या नहीं हो सकती है - लेकिन यह हो सकती है।उदाहरण के लिए यदि यह उचित urlencoding – aland

16

बेहतर उपयोग करें:

$url = parse_url($url); 
$url = $url['host']; 

echo $url; 

सरल और के लिए http://https://ftp:// और लगभग सभी उपसर्गों काम करता है।

+2

के बिना क्वेरी स्ट्रिंग में उपयोग किया जाता है तो यह सही उत्तर है! –

+1

परम सही जवाब !! +50 –

+0

बहुत खुश है कि आपको इसे पसंद आया :) –

1

निकालने के लिए http://domain (या https) और पथ प्राप्त करने के लिए:

$str = preg_replace('#^https?\:\/\/([\w*\.]*)#', '', $str); 
    echo $str; 
0

हाँ, मुझे लगता है कि str_replace() और substr() तेजी से और regex से क्लीनर है। इसके लिए यहां एक सुरक्षित फास्ट फ़ंक्शन है। यह देखना आसान है कि यह वास्तव में क्या करता है। नोट: यदि आप // को भी हटाना चाहते हैं, तो सबस्ट्रेट ($ url, 7) और सबस्ट्र ($ url, 8) लौटाएं।

// slash-slash protocol remove https:// or http:// and leave // - if it's not a string starting with https:// or http:// return whatever was passed in 
function universal_http_https_protocol($url) { 
    // Breakout - give back bad passed in value 
    if (empty($url) || !is_string($url)) { 
    return $url; 
    } 

    // starts with http:// 
    if (strlen($url) >= 7 && "http://" === substr($url, 0, 7)) { 
    // slash-slash protocol - remove https: leaving // 
    return substr($url, 5); 
    } 
    // starts with https:// 
    elseif (strlen($url) >= 8 && "https://" === substr($url, 0, 8)) { 
    // slash-slash protocol - remove https: leaving // 
    return substr($url, 6); 
    } 

    // no match, return unchanged string 
    return $url; 
} 
संबंधित मुद्दे