2012-12-28 25 views
6

Có cách nào đơn giản để sử dụng ltrim() để xóa một phiên bản khớp duy nhất thay vì tất cả các kết quả khớp không?Sử dụng ltrim được xây dựng trong PHP() để xóa một ký tự đơn

Tôi lặp qua mảng các chuỗi và tôi muốn để loại bỏ đầu tiên, và chỉ đầu tiên, trận đấu (nguyên âm trong trường hợp này):

ltrim($value, "aeiouyAEIOUY"); 

Với hành vi mặc định chuỗi aardvark hoặc Aardvark sẽ được cắt thành "rdvark". Tôi muốn kết quả là "ardvark".

Tôi không bị ràng buộc với ltrim bằng bất kỳ phương tiện nào nhưng có vẻ như hàm PHP được tích hợp sẵn gần nhất. Nó sẽ được tốt đẹp của ltrimrtrim đã có một tham số tùy chọn "giới hạn", chỉ cần nói ... :)

+1

aaeezz nên kết quả là aezz hoặc aeezz? – Lepidosteus

Trả lời

4

Chỉ cần sử dụng preg thay thế nó có một tùy chọn giới hạn

ví dụ

$value = preg_replace('/^[aeiouy]/i', '', $value, 1); 
+0

Điều này thực sự tốt hơn '{1}' tôi nghĩ vậy. Ít phân tích cú pháp hơn. Có thể downvote được cho các dấu ngoặc kép trong tham số thứ hai? – Geo

+0

ah cảm ơn đúng vì tôi đã chỉnh sửa –

1

Bạn không thể sử dụng ltrim để làm điều này vì những lý do bạn nói, cũng không phải bạn có thể sử dụng str_replace (mà cũng không có giới hạn). Tôi nghĩ rằng đó là dễ dàng nhất chỉ sử dụng một regex:

$value = preg_replace('/^[aeiouy]/i', '', $value); 

Tuy nhiên, nếu bạn thực sự không muốn làm điều đó, bạn có thể sử dụng một chuỗi con, nhưng bạn sẽ phải kiểm tra vị trí của bất kỳ của những chuỗi trong chuỗi trong vòng lặp vì không có hàm php nào thực hiện kiểm tra mà tôi biết.

+0

Cảm ơn, tôi không có giới hạn về cách tôi xóa ký tự đầu tiên. Tôi chỉ đơn giản là mới ở PHP và chưa đủ quen thuộc với tất cả các chức năng. preg_replace hoạt động tuyệt vời. – ptay

1

Bạn có thể sử dụng chức năng preg_replace:

<?php 
    $value = preg_replace('/^[aeiouy]/i', '', $value); 
?> 
+0

'{1}' là dự phòng. – delnan

+0

@delnan Cảm ơn những người đứng đầu. Tôi đã xóa nó. –

4

Regular expressions có lẽ là quá mức cần thiết, nhưng:

$value = preg_replace('/^[aeiouy]/i', '', $value); 

Lưu ý i làm cho nó case-insensitive.

+0

Hoàn hảo! Cảm ơn bạn. – ptay

1

Có một số cách bạn có thể đi về làm những gì bạn đang tìm kiếm để làm.

Có lẽ đơn giản nhất sẽ là một sự thay thế biểu thức chính quy như thế này:

$pattern = '/^[aeiouy]{1}/i'; 
$result = preg_replace($pattern, '', $original_string); 
+0

Điều này cũng hoạt động tốt, cảm ơn bạn! – ptay

1

Đây có lẽ là cách hiệu quả nhất (do đó bỏ qua biểu thức thông thường của tôi trả lời):

if (strpos('aeiouyAEIOUY', $value[0]) !== false) $value = substr($value, 1); 

Hoặc,

if (stripos('aeiouy', $value[0]) !== false) $value = substr($value, 1); 
+0

Tôi thích phiên bản regex tốt hơn. –

+0

+1. Tôi nghi ngờ điều này sẽ nhanh hơn RegEx. Điểm chuẩn, bất cứ ai? – Geo

+0

@Geo phiên bản regex liên tục chậm hơn khoảng 20%, nhưng 1 triệu hoạt động cho cả hai chỉ mất khoảng một giây, do đó, không có khả năng là một lợi ích tốc độ trong trường hợp này. –

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