2010-05-04 37 views
6

Những gì tôi đang cố gắng để đạt được ở đây là cho phép nói rằng chúng tôi có hai URL ví dụ:Làm thế nào có thể nhiều dấu gạch chéo dấu có thể được gỡ bỏ từ một URL trong Ruby

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////" 
url2 = "http://www.example.com/" 

Làm thế nào tôi có thể trích xuất các URL sọc xuống?

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa" 
url2 = "http://http://www.example.com" 

URI.parse trong Ruby khử trùng một số loại URL không đúng định dạng nhưng không hiệu quả trong trường hợp này.

Nếu chúng tôi sử dụng regex thì /^(.*)\/$/ sẽ xóa một dấu gạch chéo đơn / từ url1 và không hiệu quả đối với url2.

Có ai biết cách xử lý loại phân tích cú pháp URL này không?

Điểm ở đây là tôi không muốn hệ thống của mình có http://www.example.com/http://www.example.com được coi là hai URL khác nhau. Và tương tự với http://emy.dod.com/kaskaa/dkaiad/amaa////http://emy.dod.com/kaskaa/dkaiad/amaa/.

+1

@other_people_reading_this_question Nếu, như tôi, bạn chỉ cần xóa một dấu gạch chéo, bạn có thể sử dụng 'Chuỗi # chomp'. Ví dụ: '"/path/to/directory/". Chomp ("/")' – Ajedi32

Trả lời

23

Nếu bạn chỉ cần phải loại bỏ tất cả các dấu gạch chéo từ ngày kết thúc của chuỗi url sau đó bạn có thể thử các regex sau:

"http://emy.dod.com/kaskaa/dkaiad/amaa//////////".sub(/(\/)+$/,'') 
"http://www.example.com/".sub(/(\/)+$/,'') 

/(\/)+$/ - regex này tìm thấy một hoặc nhiều dấu gạch chéo ở phần cuối của chuỗi. Sau đó, chúng tôi thay thế trận đấu này bằng chuỗi trống.

Hy vọng điều này sẽ hữu ích.

+0

Câu trả lời hay. Một nhận xét regex nhỏ là các dấu ngoặc đơn không được yêu cầu ở đây. – user253455

+2

Cảm ơn Alex. Tôi đã tìm ra gsub ngày hôm qua (/ \/* $ /) cũng hoạt động như crudson đã đề cập. – splintercell

4

Mặc dù chủ đề này là một chút cũ và các câu trả lời trên là khá tốt, nhưng tôi đề nghị một cách khác để làm điều này:

/^(.*?)\/$/ 

Bạn có thể nhìn thấy nó trong hành động ở đây: https://regex101.com/r/vC6yX1/2

Sự kỳ diệu ở đây là *?, một trận đấu lười biếng. Vì vậy, toàn bộ cụm từ có thể được dịch là:

Khớp với ít ký tự nhất có thể và nắm bắt nó, trong khi khớp với nhiều dấu gạch chéo vì nó có thể ở cuối.

Có nghĩa là, bằng tiếng Anh đơn giản hơn, hãy xóa tất cả dấu gạch chéo theo sau.

+1

upvote vì là một regex thuần túy, thay vì sử dụng các chức năng ngôn ngữ cụ thể – theEpsilon

+0

cảm ơn bạn đã bỏ phiếu quá lâu @theEpsilon: D tôi nghĩ rằng yêu cầu này có thể được thực hiện chỉ bằng regex, thay vì một số tính năng ngôn ngữ cụ thể. – nevets

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