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

@Bhushan no текст до и после будет меняться – kabuto178

ответ

8

Вы определяете $ start и $ 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

EDIT

Fiddle демо here

+0

это тоже дает пустой результат – kabuto178

+0

Я только что обновил демо. Это работает! – jurgemaister

+0

Правильно, у меня пропало; моя ошибка lol – 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]; 
    } 
Смежные вопросы