2013-02-12 15 views
5

Próbowałem uzyskać tekst między dwoma symbolami, które mają być zastąpione przez preg_replace, ale niestety nadal nie jest to poprawnie, ponieważ otrzymuję pusty wynik, który jest pusty ciąg, to jest to, co mam tak dalekoZastępowanie tekstu między dwoma ograniczeniami

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

Więc wyjście przykład szukam byłoby:

normal text [everythingheregone] after text 

Aby

normal text [test] after text 
+0

jest normalny tekst i tekst zawsze stała po? –

+1

Zakotwiczenia '$ start' i' $ end' muszą być łańcuchami i muszą być zmienione. Używasz tablicy i '[' będzie problemem. – mario

+0

@Bhushan tekst przed i po będzie się zmieniał – kabuto178

Odpowiedz

8

Definiujesz $ start i $ end jako tablice, ale używasz ich jako normalnych zmiennych. Spróbuj zmienić swój kod do tego:

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

Pracowałem, doceniłem :) – 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

Jak o

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

powinna przynieść normal text [test] after text

EDIT

demo Fiddle here

+0

to daje puste wyjście również – kabuto178

+0

Właśnie zaktualizowałem z demo. To działa! – jurgemaister

+0

Prawidłowo, brakowało mi; mój błąd lol – kabuto178

0

Mam podejście do wyrażenia regularnego. Wyrażenie regularne jest: \[.*?]

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

niektórych funkcji, które mogą pomóc

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); 
    } 

i

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