2012-03-13 28 views
5

str_replace() khớp với ": Tên" hai lần trong ": Tên: Name_en" Tôi chỉ muốn đối sánh kết quả cho toàn bộ từ. Tôi muốn chuyển sang preg_replace()this answer.str_replace: Đối sánh toàn bộ từ chỉ

$str = ":Name :Name_en"; 
echo $str . chr(10); 
$str = preg_replace('/\b' . ':Name' . '\b/i', '"Test"', $str); 
echo $str; 

Nhưng điều này không hiệu quả vì dấu hai chấm. Không có thay thế nào diễn ra. RegExp sẽ trông như thế nào?

\b là ranh giới từ. Nhưng tôi nghĩ rằng một dấu hai chấm không thuộc về một ranh giới từ như vậy.

+2

Trước tiên, bạn cần cho chúng tôi biết định nghĩa "từ" của bạn là gì. – Jon

+0

Đối với toàn bộ từ của tôi là ': Name',': Name_en' và cứ thế. Đối với RegExp tôi không biết. – testing

+0

Đó không phải là một định nghĩa, đó là một ví dụ. – Jon

Trả lời

9

Bạn không cần ranh giới từ trên đầu của chuỗi của bạn:

$str = preg_replace('/:Name\b/i', '"Test"', $str); 
+0

Đôi khi nó rất dễ dàng. Bạn có một liên kết tốt nơi RegExp như '/', '\ b','/i' có thể được giải thích một cách dễ dàng không? – testing

+0

Không off-hand :) Tôi nghĩ rằng các tài liệu php.net là khá tốt – Evert

+0

Đối với những người tìm kiếm một liên kết tốt - http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/ – Styphon

1

Nếu bạn sử dụng PHP 5 + bạn vẫn có thể sử dụng str_replace.

$str = ":Name :Name_en"; 
echo $str . chr(10); 

// The final int limits the function to a single replace. 
$str = str_replace(':Name', '"Test"', $str, 1); 

echo $str; 
+0

Nhưng mục nào nó có thay thế không? Cái đầu tiên, cái cuối cùng, ...? Trong ứng dụng của tôi có thể là điều này thay đổi ... – testing

+1

Đầu tiên. str_replace là tuần tự. – Bradmage

+1

Điều đó dường như không phải là những gì tài liệu nói: 'count: Nếu được thông qua, điều này sẽ được đặt thành số thay thế được thực hiện.'. Vì vậy, nó là một tham chiếu biến, không phải là hằng số – jokkedk

1

Nếu bạn muốn thay thế nhiều từ khóa là một kết hợp, một cái gì đó giống như một cuốn từ điển hoặc placeholders, bạn có thể sử dụng để phù hợp với mô hình regex của bạn:

$words=array("_saudation_"=>"Hello", "_animal_"=>"cat", "_animal_sound_"=>"MEooow"); 
$source=" _saudation_! My Animal is a _animal_ and it says _animal_sound_ , _no_match_"; 

echo (preg_replace_callback("/\b_(\w*)_\b/", function($match) use ($words) { if(isset($words[$match[0]])){ 
return ($words[$match[0]]);}else{ return($match[0]);}}, $source)); 

Returns: Hello! Động vật của tôi là một con mèo và nó nói MEooow, _no_match_

Lưu ý rằng, mặc dù "_no_match_" thiếu bản dịch, nó sẽ khớp trong quá trình regex nhưng giữ nguyên khóa của nó.

+0

Điều này cho phép nhiều thay thế bằng các phím khác nhau – Miguel

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