2013-02-12 10 views
5

मैं दो प्रतीकों के बीच पाठ को preg_replace के साथ प्रतिस्थापित करने का प्रयास कर रहा हूं, लेकिन अभी भी यह सही नहीं है क्योंकि मुझे खाली स्ट्रिंग खाली नल आउटपुट मिलता है, यही मेरे पास है अब तकदो अंगों के बीच पाठ को प्रतिस्थापित करना

$start = '["'; 
$end = '"]'; 
$msg = preg_replace('#('.$start.')(.*)('.$end.')#si', '$1 test $3', $row['body']); 

तो एक उदाहरण उत्पादन मैं देख रहा हूँ होगा:

normal text [everythingheregone] after text 

करने के लिए

normal text [test] after text 
+0

सामान्य पाठ और हमेशा पाठ निरंतर के बाद है? –

+1

'$ start' और' $ end' एंकर स्ट्रिंग होना चाहिए, और इसे बच जाना चाहिए। आप एक सरणी का उपयोग कर रहे हैं, और '[' एक समस्या होगी। – mario

+0

@ बुशान कोई पाठ पहले और बाद में बदल जाएगा – kabuto178

उत्तर

8

आप $ शुरूआत और $ end को सरणी के रूप में परिभाषित कर रहे हैं, लेकिन इसे सामान्य चर के रूप में उपयोग कर रहे हैं। इस के लिए अपने कोड को बदलने का प्रयास करें:

$start = '\['; 
$end = '\]'; 
$msg = preg_replace('#('.$start.')(.*)('.$end.')#si', '$1 test $3', $row['body']); 
+0

काम किया, सराहना की :) – kabuto178

0
$row['body']= "normal text [everythingheregone] after text "; 
$start = '\['; 
$end = '\]'; 
$msg = preg_replace('#'.$start.'.*?'.$end.'#s', '$1 [test] $3', $row['body']); 
//output: normal text [test] after text done 
1

कैसे के बारे में

$str = "normal text [everythingheregone] after text"; 
$repl = "test"; 
$patt = "/\[([^\]]+)\]/"; 
$res = preg_replace($patt, "[". $repl ."]", $str); 

उपज चाहिए normal text [test] after text

संपादित

फिडल डेमो here

+०१२३५१६४१०६१
+0

यह एक खाली आउटपुट के साथ-साथ – kabuto178

+0

देता है, मैंने अभी डेमो के साथ अपडेट किया है। यह काम! – jurgemaister

+0

सही, मेरे पास गायब था; मेरी गलती – kabuto178

0

मेरे पास एक रेगेक्स दृष्टिकोण है। नियमित अभिव्यक्ति है: \[.*?]

<?php 
$string = 'normal text [everythingheregone] after text '; 
$pattern = '\[.*?]'; 
$replacement = '[test]' 
echo preg_replace($pattern, $replacement, $string); 
//normal text [test] after text 
?> 
1

कुछ कार्यों

function getBetweenStr($string, $start, $end) 
    { 
     $string = " ".$string; 
     $ini = strpos($string,$start); 
     if ($ini == 0) return ""; 
     $ini += strlen($start);  
     $len = strpos($string,$end,$ini) - $ini; 
     return substr($string,$ini,$len); 
    } 

और मदद मिल सकती है

function getAllBetweenStr($string, $start, $end) 
    { 
     preg_match_all('/' . preg_quote($start, '/') . '(.*?)' . preg_quote($end, '/') . '/', $string, $matches); 
     return $matches[1]; 
    }