2012-01-12 66 views
6

Tôi có URL sau: www.exampe.com/id/1234 và tôi muốn một regex nhận giá trị của tham số id trong trường hợp này là 1234.Làm cách nào để sử dụng Regex?

tôi đã cố gắng

<?php 
$url = "www.exampe.com/id/1234"; 
preg_match("/\d+(?<=id\/[\d])/",$url,$matches); 
print_r($matches); 
?> 

và có Array ([0] => 1) được hiển thị chữ số đầu tiên chỉ.

Câu hỏi đặt ra là, làm cách nào để viết lại regex để nhận được tất cả các chữ số sử dụng giao diện tích cực phía sau?

+3

tại sao bạn muốn nhìn sau? –

+0

Tôi đã cố gắng giải quyết một vấn đề phức tạp hơn và đang sử dụng ví dụ này để làm cho nó đơn giản. –

Trả lời

10

Tại sao không chỉ preg_match('(id/(\d+))', $url, $matches) mà không có bất kỳ sự trông đợi nào? Kết quả sẽ là $matches[1].

Nhân tiện, biểu thức chính xác của giao diện sẽ là ((?<=id/)\d+), nhưng bạn thực sự không nên sử dụng ngoại hình trừ khi bạn cần.

Một giải pháp thay thế khác là (id/\K\d+) (\K đặt lại khởi động đối sánh và thường được sử dụng làm giao diện mạnh mẽ hơn).

+0

Cảm ơn nhiều. Mối quan tâm chính của tôi là tìm ra lý do tại sao cái nhìn phía sau không hoạt động. Không quen thuộc với '\ K' nhưng tôi sẽ xem xét nó. –

+0

+ cho ý tưởng tuyệt vời với '\ K' thx – Thielicious

6

Tôi đồng ý với NikiC rằng bạn không cần sử dụng lookbehind; nhưng kể từ khi bạn yêu cầu — bạn có thể viết

<?php 
$url = "www.exampe.com/id/1234"; 
preg_match("/(?<=id\/)\d+/",$url,$matches); 
print_r($matches); 
?> 
+0

Nó hoạt động. Chính xác những gì tôi muốn. –

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