2011-11-11 22 views
6

Tôi đang tìm để thay thế tất cả các số độc lập từ một chuỗi có số không có ký tự liền kề (bao gồm cả dấu gạch ngang), ví dụ:preg_replace để loại bỏ số độc

thử nghiệm 3 chuỗi 49Test 49test9 9

nên trở lại chuỗi thử nghiệm 49Test 49Test9

Cho đến nay tôi đã chơi xung quanh với:

$str = 'Test 3 string 49Test 49test9 9'; 
    $str= preg_replace('/[^a-z\-]+(\d+)[^a-z\-]+?/isU', ' ', $str); 
    echo $str; 

Tuy nhiên không có may mắn, này trả

chuỗi thử nghiệm 9Test 9test9

rời ra một phần của chuỗi, tôi nghĩ để thêm [0-9] đến các trận đấu, nhưng không có kết quả , những gì tôi bị thiếu, có vẻ đơn giản như vậy?

Cảm ơn trước

+0

Bạn có muốn thay thế các số bằng một ký tự khoảng trắng (như trong ví dụ của bạn) hay đơn giản là xóa chúng? – Phil

Trả lời

7

Hãy thử sử dụng một ranh giới từ và nhìn quanh tiêu cực đối với dấu gạch nối, ví dụ như

$str = preg_replace('/\b(?<!-)\d+(?!-)\b/', '', $str); 
+0

Tác phẩm này ngoại trừ tôi cần phải cho phép 2 bài kiểm tra là tốt, xin lỗi nếu tôi không quá rõ ràng về điều đó :-) – user1041334

+1

Tốt, tôi không biết về \ b. Cảm ơn bạn về thông tin! –

+0

@ user1041334 Tôi đã thêm giải pháp có thể vào vấn đề dấu gạch nối sử dụng giao diện phủ định. Xem nếu nó hoạt động – Phil

0

tôi sẽ đề nghị sử dụng explode(" ",$str) để có được một mảng của "chữ" trong bạn chuỗi. Sau đó, sẽ dễ dàng hơn để lọc ra các số đơn lẻ.

1

Không phải là phức tạp, nếu bạn xem không gian :)

<?php 
$str = 'Test 3 string 49Test 49test9 9'; 
$str = preg_replace('/(\s(\d+)\s|\s(\d+)$|^(\d+)\s)/iU', '', $str); 
echo $str; 
+0

Cảm ơn, hoạt động như một sự quyến rũ! – user1041334

+0

Thực ra; Tôi đứng sử[email protected] Phil của câu trả lời có lẽ là một giải pháp tốt hơn so với tôi. Tôi chưa biết về \ b. Tôi đang làm đây. StackOverflow thật tuyệt. –

1

Hãy thử điều này, tôi đã cố gắng để trang trải nhu cầu bổ sung của bạn để không phù hợp trên 5 abc

\s*(?<!\B|-)\d+(?!\B|-)\s* 

thay thế với một không gian đơn!

Xem nó here online on Regexr

Vấn đề sau đó là mở rộng ranh giới từ với nhân vật -. Tôi đạt được điều này bằng cách sử dụng các góc nhìn tiêu cực và tìm kiếm - hoặc \B (không phải là một ranh giới từ)

Ngoài ra, tôi phải thay thế bằng khoảng trắng đơn.

+0

Công việc tuyệt vời làm giảm không gian – Phil

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