2010-06-08 42 views

Trả lời

8

Như thế này:

String baseUrl; 
Pattern p = Pattern.compile("^(([a-zA-Z]+://)?[a-zA-Z0-9.-]+\\.[a-zA-Z]+(:\d+)?/"); 
Matcher m = p.matcher(str); 
if (m.matches()) 
    baseUrl = m.group(1); 

Tuy nhiên, bạn nên sử dụng URI class thay vào đó, như thế này:

URI uri = new URI(str); 
+0

Cảm ơn phản hồi nhanh chóng của bạn nhưng nó mang lại https: // www.abc.com sadfl có thể nó có thể nó chỉ cung cấp cho một đầu tiên https://www.abc.com – Sunil

+0

Cảm ơn bạn rất nhiều sir Điều này đang làm việc – Sunil

+0

+1 cho lớp URI. – Aistina

1

/^(https?\:\/\/[^\/]+).*/$1/

này sẽ nắm bắt được bất cứ điều gì mà bắt đầu bằng http và $ 1 sẽ chứa tất cả mọi thứ từ đầu đến/sau đầu tiên //

+0

Cám ơn phản ứng nhanh chóng của bạn – Sunil

1

Trừ ghi-and-ném-xa kịch bản, bạn nên luôn điệp khúc từ phân tích cú pháp cú pháp phức tạp (địa chỉ e-mail, url, trang html, v.v.) sử dụng regexes.

hãy tin tôi, bạn sẽ bị cắn cuối cùng.

+0

Cảm ơn bạn đã trả lời – Sunil

0

Tôi khá chắc chắn rằng đó là một lớp Java mà sẽ cho phép thao tác con đường, nhưng nếu nó có phải là một regex,

https?://[^/]+ 

sẽ làm việc. (s? bao gồm cũng để xử lý https:)

+0

Cảm ơn bạn đã phản hồi của bạn thưa ông – Sunil

0

Hình như là giải pháp đơn giản nhất để hai ví dụ cụ thể của bạn sẽ là các mô hình:

[^/]_//[^/]+ 

ví dụ: không dấu gạch chéo (0 hoặc nhiều lần), hai dấu gạch chéo, không -slash (0 hoặc nhiều lần). Bạn có thể chặt chẽ hơn nếu bạn muốn, vì hai câu trả lời hiện có đang hoạt động theo nhiều cách khác nhau - một câu trả lời sẽ từ chối, ví dụ: URL bắt đầu bằng ftp:, URL còn lại sẽ từ chối các tên miền có dấu gạch dưới (nhưng chấp nhận các URL không có số protocol:// hàng đầu, do đó thậm chí còn rộng hơn các tên miền của tôi). Điều này nhiều câu trả lời (tất cả các wrt chính xác của bạn thông số kỹ thuật scant ;-) nên đề nghị với bạn rằng thông số kỹ thuật của bạn quá mơ hồ và nên được thắt chặt.

+0

Cảm ơn bạn đã trả lời nhanh chóng của bạn thưa ông – Sunil

0

Đây là một regex cần thỏa mãn vấn đề như được đưa ra.

https?://[^/]* 

Tôi giả sử bạn đang yêu cầu điều này một phần để thu được nhiều kiến ​​thức hơn về regex.Tuy nhiên, nếu bạn đang cố gắng để kéo máy chủ từ một URL, nó được cho là chính xác hơn nhiều để sử dụng phương pháp phân tích cú pháp mạnh mẽ hơn của Java:

String urlStr = "https://www.abc.com/stuff"; 
URL url = new URL(urlStr); 
String host = url.getHost(); 
String protocol = url.getProtocol(); 
URL baseUrl = new URL (protocol, host); 

này là tốt hơn, vì nó nên bắt nhiều trường hợp nếu URL đầu vào của bạn không nghiêm ngặt như mô tả ở trên.

+0

Cảm ơn câu trả lời của bạn nhanh chóng – Sunil

2

Một lót mà không cần regexp:

String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2)); 
+0

:) Cảm ơn câu trả lời của bạn Nhưng tôi muốn sử dụng regex – Sunil

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