2010-08-06 33 views
25

Tôi muốn thay thế các từ chỉ hoàn toàn sử dụng phpPHP chuỗi thay thế phù hợp với toàn bộ từ

Ví dụ: Nếu tôi có

$text = "Hello hellol hello, Helloz"; 

và tôi sử dụng

$newtext = str_replace("Hello",'NEW',$text); 

Các văn bản mới nên trông giống như

NEW hello1 hell o, Helloz

PHP trả

hello1 MỚI hello, Newz

Cảm ơn.

Trả lời

48

Bạn muốn sử dụng cụm từ thông dụng. \b khớp với ranh giới từ.

$text = preg_replace('/\bHello\b/', 'NEW', $text); 

Nếu $text chứa UTF-8 văn bản, bạn sẽ có thêm các modifier Unicode "u", do đó các ký tự không-latin không hiểu sai như ranh giới từ:

$text = preg_replace('/\bHello\b/u', 'NEW', $text); 
4

nhiều từ trong chuỗi thay thế bằng này

$String = 'Team Members are committed to delivering quality service for all buyers and sellers.'; 
    echo $String; 
    echo "<br>"; 
    $String = preg_replace(array('/\bTeam\b/','/\bfor\b/','/\ball\b/'),array('Our','to','both'),$String); 
    echo $String; 
1

Array danh sách thay thế: Trong trường hợp các dây thay thế của bạn thay thế lẫn nhau, bạn cần preg_replace_callback.

$pairs = ["one"=>"two", "two"=>"three", "three"=>"one"]; 

$r = preg_replace_callback(
    "/\w+/",       # only match whole words 
    function($m) use ($pairs) { 
     if (isset($pairs[$m[0]])) {  # optional: strtolower 
      return $pairs[$m[0]];  
     } 
     else { 
      return $m[0];    # keep unreplaced 
     } 
    }, 
    $source 
); 

Rõ ràng/cho hiệu quả /\w+/ có thể được thay thế bằng một chìa khóa-list /\b(one|two|three)\b/i.

+0

bạn có lỗi cú pháp, thay thế dấu ngoặc cuối cùng bằng dấu ngoặc đơn 'preg_replace' –

+0

,' if (isset ($ pairs [$ m [0]]) 'không có dấu ngoặc đơn cosing –

+0

lấy lại - 1 phiếu bầu này có vẻ tốt ngay bây giờ –

Các vấn đề liên quan