簡體   English   中英

有沒有辦法檢查正則表達式是否代表網址

[英]Is there a way to check if a regular expression represents a url

有沒有辦法檢查正則表達式是否表示有效的URL? 說正則表達式是Java字符串,有沒有辦法檢查這些字符串是否代表有效的URL?

例如說

String s1 = "/amazon\.com\//";
String s2 = "/google(\.[a-z]+)?\.[a-z]+\/search.*q=/i";
String s3 = "/.*/"; //Represents any URL
String s4 = "hello world";

s1,s2和s3是表示Urls的有效正則表達式,但s4無效。

謝謝,索尼

創建一個與特定URL匹配的正則表達式很容易,但是幾乎不可能編寫一個與任何有效URL匹配也不與任何無效URL匹配的Regex。 首先,您必須應對百分比編碼以及有關何時/可以將其用於不同字符的規則。

我還要指出,根據URL規范,您的示例都不是有效的URL。


我的建議是使用new URL(String)new URI(String)檢查無效的URL,然后檢查組件以執行細粒度匹配。

這些都應該與任何url匹配(假設就是您的問題,措辭有點含糊):

String urlRegex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
String regexUrl = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";

聽起來好像帖子在詢問如何確定給定的正則表達式是否匹配有效的URL。 那些特定的正則表達式示例是否與URL不匹配。

這可能可以概括為確定與給定正則表達式匹配的語言是否也可以由與所有URL匹配的“規范”正則表達式進行匹配。 前面的問題可能有用:

是否存在可以確定一種常規語言是否匹配任何輸入,另一種常規語言匹配的算法?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM