2013-02-12 37 views
5

Tôi đã cố gắng lấy văn bản giữa hai biểu tượng được thay thế bằng preg_replace, nhưng vẫn chưa hoàn toàn nhận được nó ngay khi tôi nhận được kết quả rỗng là chuỗi rỗng, đây là những gì tôi có xaThay thế văn bản giữa hai chi tiết

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

vì vậy, một ví dụ đầu ra tôi đang tìm kiếm sẽ là:

normal text [everythingheregone] after text 

để

normal text [test] after text 
+0

Is văn bản bình thường và khi văn bản luôn luôn không đổi? –

+1

Các neo $ 'bắt đầu' và' $ end' phải là chuỗi và phải được thoát. Bạn đang sử dụng một mảng và '[' sẽ là một vấn đề. – mario

+0

@Bhushan không có văn bản nào trước và sau sẽ thay đổi – kabuto178

Trả lời

8

Bạn định nghĩa $ start và $ end là mảng, nhưng sử dụng nó như là các biến thông thường. Hãy thử thay đổi mã của bạn như thế này:

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

Đã làm việc, được đánh giá cao :) – 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

Làm thế nào về

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

nên mang normal text [test] after text

EDIT

Fiddle bản demo here

+0

điều này cho ra một kết quả trống cũng như – kabuto178

+0

Tôi vừa cập nhật với bản trình diễn. Những công việc này! – jurgemaister

+0

Đúng, tôi đã mất tích; sai lầm của tôi lol – kabuto178

0

Tôi có cách tiếp cận regex. Các biểu hiện thường xuyên là: \[.*?]

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

một số chức năng có thể giúp

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]; 
    } 
Các vấn đề liên quan