2012-06-13 28 views
5

Tôi đang sử dụng PHP và không thực sự tốt với regex. Tôi cần một preg_replace có thể thêm một dấu cách nếu một chữ cái hoặc số nằm liền kề.Regex: Thêm dấu cách nếu chữ cái tiếp giáp với số

Đây là những kịch bản:

mystreet12 -> mystreet 12 
mystreet 38B -> mystreet 38 B 
mystreet16c -> mystreet 16 c 
my street8 -> my street 8 

Cảm ơn.

Trả lời

2

Sử dụng lớp POSIX cho tính di động:

preg_replace("/([[:alpha:]])([[:digit:]])/", "\\1 \\2", $subject); 

nhận được sự chuyển đổi đầu tiên.

preg_replace("/([[:digit:]])([[:alpha:]])/", "\\1 \\2", $subject); 

là hạng hai.

3

Cái gì như:

preg_replace_all("/([a-z]+)([0-9]+)/i","\\1 \\2", $subject); 

nên giúp bạn có được xa :)

+0

Sẽ không hoạt động với '1a'. – Qtax

+0

Lỗi nghiêm trọng: Gọi đến chức năng không xác định preg_replace_all() – John

6

Bạn có thể sử dụng lookarounds để phù hợp với vị trí như vậy như vậy:

preg_replace('/(?<=[a-z])(?=\d)|(?<=\d)(?=[a-z])/i', ' ', $str); 

Tùy thuộc vào cách bạn định nghĩa "chữ" bạn có thể muốn điều chỉnh [a-z].

Lookarounds được yêu cầu để làm cho nó hoạt động đúng với chuỗi như:

0a1b2c3 

đâu giải pháp mà không sẽ thất bại.

+0

Hoàn hảo, cảm ơn bạn. – John

+0

Không hoạt động nếu số tiếp giáp với ký tự là số âm. –

+0

@SayanBhattacharyya có số đường phố tiêu cực không? Nếu bạn muốn tính năng đó là tầm thường để thêm '-' vào nơi cần thiết. Chỉ cần thay thế tất cả '\ d' bằng' [- \ d] '. – Qtax

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