Tôi có một câu hỏi regex rất đơn giản. Giả sử tôi có 2 điều kiện:Câu hỏi Regex rất đơn giản
Làm thế nào tôi có thể trích xuất các baseUrl sử dụng regex?
đầu ramẫu:
Tôi có một câu hỏi regex rất đơn giản. Giả sử tôi có 2 điều kiện:Câu hỏi Regex rất đơn giản
Làm thế nào tôi có thể trích xuất các baseUrl sử dụng regex?
đầu ramẫu:
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);
/^(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 //
Cám ơn phản ứng nhanh chóng của bạn – Sunil
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.
Cảm ơn bạn đã trả lời – Sunil
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:
)
Cảm ơn bạn đã phản hồi của bạn thưa ông – Sunil
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.
Cảm ơn bạn đã trả lời nhanh chóng của bạn thưa ông – Sunil
Đâ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.
Cảm ơn câu trả lời của bạn nhanh chóng – Sunil
Một lót mà không cần regexp:
String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2));
:) Cảm ơn câu trả lời của bạn Nhưng tôi muốn sử dụng regex – Sunil
này trông giống như bài tập về nhà – Gyom
@Gyom này trông không có gì giống như bài tập về nhà –