कई मदों के लिए Str_replace


115

मुझे पहले ऐसा करना याद है, लेकिन कोड नहीं मिल रहा है। मैं इस तरह से एक वर्ण को बदलने के लिए str_replace का उपयोग करता हूं: str_replace(':', ' ', $string);लेकिन मैं \/:*?"<>|प्रत्येक के लिए str_replace किए बिना निम्नलिखित सभी वर्णों को प्रतिस्थापित करना चाहता हूं ।


2
आप इन सभी वर्णों को एक स्थान से बदलना चाहते हैं?
ज़ीउस

7
उत्कृष्ट php.net मैनुअल का संदर्भ लेने से डरो मत और यह देखने के लिए कि क्या संभव है, यह देखने के लिए परम अनुभाग की समीक्षा करें
माइक बी

जवाबों:


117

str_replace() एक सरणी ले सकते हैं, इसलिए आप ऐसा कर सकते हैं:

$new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string);

वैकल्पिक रूप से आप उपयोग कर सकते हैं preg_replace():

$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);

2
ओपी की मानें तो बैकस्लैश को बदल दिया जाना चाहिए, क्योंकि प्रीग्रेप्लेस पैटर्न मेरे काम नहीं आया। अपेक्षा के अनुसार काम करने के लिए बैकस्लैश प्राप्त करने के लिए, मुझे उनमें से 4 (यानी "\\\\") पैटर्न का उपयोग करना पड़ा।
ग्रीनमैट सेप

1
अच्छा जवाब, @dogbert उत्तर को जोड़ने से यह उन लोगों के लिए पूरा हो जाएगा जो मैनुअल नहीं पढ़ते हैं और महसूस नहीं करते हैं कि str_split एक सरणी देता है।
ब्रेडमैज

ओपी के मामले में str_replace()ओवर preg_replace()(या इसके विपरीत) का क्या फायदा है ?
लदितदेव

1
@ किसी भी तरह से कोई वास्तविक लाभ नहीं है, यह सिर्फ वरीयता की बात है
NullUserException

1
@ मधुरभैया रेगेक्स को '~[\\+><-]~'(नोट करें जहां -है) बदलें । पानी का छींटा ( -) एक रेगीक्स मेटाचैकर है, इसलिए इसे भागने या रणनीतिक रूप से चरित्र वर्ग (सब कुछ []) में रखने की आवश्यकता है। इस उत्तर को देखें: stackoverflow.com/a/7604888/396458
NullUserException

181

ऐशे ही:

str_replace(array(':', '\\', '/', '*'), ' ', $string);

या, आधुनिक PHP में (5.4 के बाद से कुछ भी), थोड़ा कम चिंताजनक:

str_replace([':', '\\', '/', '*'], ' ', $string);

73

उदाहरण के लिए , यदि आप सर्च 1 को रिप्लेस 1 और रिप्लेस 2 को रिप्लेस 2 से बदलना चाहते हैं तो निम्नलिखित कोड काम करेगा:

print str_replace(
    array("search1","search2"),
    array("replace1", "replace2"),
    "search1 search2"
);

// आउटपुट: रिप्लेस 1 रिप्लेसमेंट 2




2

आप preg_replace () का उपयोग कर सकते हैं । निम्न उदाहरण कमांड लाइन php का उपयोग करके चलाया जा सकता है:

<?php
$s1 = "the string \\/:*?\"<>|";
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
echo "\n\$s2: \"" . $s2 . "\"\n";
?>

आउटपुट:

$ s2: "स्ट्रिंग"


चरित्र वर्ग के अंदर बहुत भागना। (देखें स्वीकृत उत्तर)
मिकमैकुसा

0

मेरे पास एक स्थिति थी जिससे मुझे HTML टैग्स को दो अलग-अलग प्रतिस्थापन परिणामों के साथ बदलना पड़ा।

$trades = "<li>Sprinkler and Fire      Protection Installer</li>
<li>Steamfitter </li>
<li>Terrazzo, Tile and Marble      Setter</li>";

$s1 =  str_replace('<li>', '"', $trades);

$s2 = str_replace('</li>', '",', $s1);

echo $s2;

परिणाम

"स्प्रिंकलर एंड फायर प्रोटेक्शन इंस्टॉलर", "स्टीमफिटर", "टेरेज़ो, टाइल एंड मार्बल सेटर",


0

मुझे लगता है कि आप इसके बाद देख रहे हैं:

// example
private const TEMPLATE = __DIR__.'/Resources/{type}_{language}.json';

...

public function templateFor(string $type, string $language): string
{
   return \str_replace(['{type}', '{language}'], [$type, $language], self::TEMPLATE);
}

0

मेरे उपयोग के मामले में, मैंने HTML दस्तावेज़ में कुछ फ़ील्डों को पैरामीटरित किया है, और एक बार जब मैं इन फ़ील्ड्स को मैच करता हूं तो लोड करता हूं और उन्हें str_placeplace विधि का उपयोग करके प्रतिस्थापित करता हूं।

<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.