2013-02-12 37 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

是文本始終不變後正常的文本和? – 2013-02-12 12:11:25

+1

'$ start'和'$ end'錨點必須是字符串,並且必須轉義。你正在使用一個數組,而'['會是一個問題。 – mario 2013-02-12 12:11:36

+0

@Bhushan前後的文字都不會改變 – kabuto178 2013-02-12 12:13:21

回答

8

您正在將$ start和$ end定義爲數組,但將其用作正常變量。試着改變你的代碼如下:

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

工作過,非常感謝:) – kabuto178 2013-02-12 12:35:44

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 2013-02-12 12:31:11

+0

我剛更新了demo。這工作! – jurgemaister 2013-02-12 12:35:11

+0

正確,我失蹤了;我的錯誤大聲笑 – kabuto178 2013-02-12 12:36:50

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