2016-11-30 4 views
5

मैं थोड़े एक छोटे से संघर्ष कर रहा ...पीएचपी पाठ किया है

मैं इस बारे में लगभग 5 stackoverflow सवाल ऊपर देखा, लेकिन उनमें से कोई रास्ता नहीं मैं मन में है काम करने के लिए लग रहा था। असल में मैं सिर्फ इमोटिकॉन्स के साथ "शब्द" को प्रतिस्थापित करना चाहता हूं।

समस्या यह है कि मैं शब्द को केवल रूपांतरित करना चाहता हूं जब शब्द किसी अन्य शब्द का हिस्सा नहीं है।

इस कोड को मैं अब तक है:

$text = ":D i dont kn:ow about this :O i just want to :) and :D everyday:P"; 
$icons = array(
     ':)' => '<img class="postemot" src="/emoticons/smile_yell.png" />', 
     ':D' => '<img class="postemot" src="/emoticons/laugh_yell.png" />', 
     ':(' => '<img class="postemot" src="/emoticons/sad_yell.png" />', 
     '>:O' => '<img class="postemot" src="/emoticons/scared_yell.png" />', 
     ':p' => '<img class="postemot" src="/emoticons/tongue_yell.png" />', 
     ':P' => '<img class="postemot" src="/emoticons/tongue_yell.png" />', 
     ':O' => '<img class="postemot" src="/emoticons/surprised_yell.png" />', 
     ':o' => '<img class="postemot" src="/emoticons/surprised_yell.png" />' 
    ); 
    foreach($icons as $icon=>$image) { 
      $icon = preg_quote($icon); 
      $text = preg_replace("~\b$icon\b~",$image,$text); 
    } 
    echo $text; 

लेकिन यह सिर्फ काम नहीं किया। आउटपुट सही नहीं था। असल में केवल आउटपुट इमोटिकॉन अंतिम था, "रोज़ाना: पी", जो गलत है।

everyday:P 
     ^asserts right before here 

तो तुम lookarounds का उपयोग कर इमोटिकॉन सुनिश्चित करने के लिए एक और दावे से काम करने के लिए एक गैर से घिरा हुआ नहीं है: के बाद से \b एक स्थिति है कि वांछित नहीं से मेल खाता है

+1

चीजों को ध्यान में रखना आवश्यक है ... इमोटिकॉन दूसरे शब्द का हिस्सा कब होता है ?? इमोटिकॉन को शब्दों से अलग करता है ??? –

+0

@ हल्लूर - यह उनको अलग नहीं करता है। यही कारण है कि उन्हें इमोटिकॉन के रूप में आउटपुट करने के लिए स्वीकार्य बनाता है। उदाहरण के लिए, जब इमोटिकॉन अकेला होता है, इसके चारों ओर कोई अन्य अक्षर नहीं है, तो इसे आउटपुट करें। मुझे नहीं पता कि आप ईमानदार होने का क्या मतलब है ... –

+0

$ आइकन खोलने और समापन ब्रैकेट हो सकता है; रेगेक्स में इन्हें बचने की जरूरत है। – JosefScript

उत्तर

4

इमोटिकॉन पर शब्द सीमा अक्षरों से परे लागू करना सही नहीं है अंतरिक्ष चरित्र:

(?<!\S)$icon(?!\S) 
+0

बस ध्यान दें, यह बिना regex के भी किया जा सकता है: '$ text = str_replace (" $ icon "," $ image ", "$ पाठ"); ' –