मैं एक स्ट्रिंग है लग रहा है जैसे:पीएचपी: http हटाने `: //` लिंक शीर्षक से
$string = '<a href="http://google.com">http://google.com</a>';
मैं कड़ी पाठ से http://
हिस्सा कैसे निकाल सकता है, लेकिन href में छोड़ विशेषता?
मैं एक स्ट्रिंग है लग रहा है जैसे:पीएचपी: http हटाने `: //` लिंक शीर्षक से
$string = '<a href="http://google.com">http://google.com</a>';
मैं कड़ी पाठ से http://
हिस्सा कैसे निकाल सकता है, लेकिन href में छोड़ विशेषता?
एक पूर्ण विकसित पार्सर का उपयोग कर के बिना, इस ज्यादातर स्थितियों के लिए काम कर सकता है ...
$str = '<a href="http://google.com">http://google.com</a>';
$regex = '/(?<!href=["\'])http:\/\//';
$str = preg_replace($regex, '', $str);
var_dump($str); // string(42) "<a href="http://google.com">google.com</a>"
यह एक नकारात्मक lookbehind का उपयोग करता है यकीन है कि कोई href="
या href='
यह पूर्ववर्ती बनाने के लिए।
यह उन लोगों को भी ध्यान में रखता है जो '
के साथ अपने गुण मान को सीमित करते हैं।
$string = '<a href="http://google.com">http://google.com</a>';
$var = str_replace('>http://','>',$string);
बस IDEone.com में यह कोशिश की और इसका वांछित प्रभाव है।
$string = '<a href="http://google.com">http://google.com</a>';
$var = explode('http://',$string);
echo $var[2];
किसी भी साधारण नियमित अभिव्यक्ति या स्ट्रिंग प्रतिस्थापन कोड शायद सामान्य मामले में विफल रहा है। ऐसा करने का एकमात्र "सही" तरीका वास्तव में एक एसजीएमएल/एक्सएमएल स्निपेट के रूप में खंड को पार्स करना है और मूल्य से http://
को हटा देना है।
किसी भी अन्य (उचित रूप से छोटे) स्ट्रिंग मैनिपुलेशन कोड के लिए, इसे तोड़ने वाला एक काउंटररेक्स नमूना ढूंढना बहुत आसान होगा।
ठीक है, गलत तरीका अभी भी अधिक उपयुक्त है। यहां ओवरकिल समाधान (एचटीएमएल पार्सर) का उपयोग करके वारंट करने के लिए पर्याप्त एज केस क्षमता नहीं है। एक नियमित अभिव्यक्ति पर्याप्त है। (एचटीएमएल पार्सिंग मेमे के लिए कोई रेगेक्स कुछ हद तक दिनांकित नहीं है।) – mario
एक आदमी का "मेमे" एक और आदमी की शुद्धता है।हम नहीं जानते कि यह हर समय काम करने के लिए कितना महत्वपूर्ण है, या इनपुट कितना भरोसेमंद हो सकता है। रेगेक्स शायद काम करेगा, लेकिन मैं @ एलेक्सेंड्रा को इंप्रेशन देना नहीं चाहता हूं कि हर संभव इनपुट के लिए उनकी समस्या हल हो गई है। –
मानते हैं कि "http: //" हमेशा $ स्ट्रिंग पर दो बार दिखाई देता है, स्ट्रिप्स का उपयोग करके "http: //" पीछे स्ट्रिंग को खोजें। यदि खोज सफल हो जाती है, तो आप "http: //" के start_index को जान लेंगे जिसे आप निकालना चाहते हैं (और आप निश्चित रूप से लंबाई जानते हैं)। अब आप उस सबकुछ को निकालने के लिए सबस्ट्रेट का उपयोग कर सकते हैं जो उस खंड के पहले और बाद में जाता है जिसे आप निकालना चाहते हैं।
इस साधारण मामले में, preg_replace
फ़ंक्शन शायद काम करेगा। और अधिक स्थिरता के लिए, DOMDocument
प्रयोग करके देखें:
$string = '<a href="http://google.com">http://google.com</a>';
$dom = new DOMDocument;
$dom->loadXML($string);
$link = $dom->firstChild;
$link->nodeValue = str_replace('http://', '', $link->nodeValue);
$string = $dom->saveXML($link);
बस एक बढ़त का मामला, आप यह सुनिश्चित करने के लिए रेगेक्स का उपयोग करना चाह सकते हैं कि आप इसे केवल शुरुआत से ही बंद कर दें, 'http://example.com/send-to-friend?url=http:// जैसे लिंक के बारे में क्या है। somewhere.com'? इसके अलावा, एक पार्सर का उपयोग करने के लिए +1। – alex
$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com
कि दोनों http के लिए काम करेंगे: // और https: //
आप मिल सकती है [ 's ($ str) -> प्रतिस्थापन ('http: //') '] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L305) सहायक, जैसा कि [इस स्टैंडअलोन में पाया गया है) पुस्तकालय] (https://github.com/delight-im/PHP-Str)। – caw