简介
在这个实验中,你将学习如何使用正则表达式在 Java 中检查给定的字符串是否符合 URL 格式。我们将定义一个专门用于 URL 的正则表达式模式,使用 Pattern.matches()
方法根据此模式测试字符串,并探讨如何验证常见的 URL 方案。这个实践练习将指导你完成在 Java 应用程序中实现 URL 验证的实际步骤。
在这个实验中,你将学习如何使用正则表达式在 Java 中检查给定的字符串是否符合 URL 格式。我们将定义一个专门用于 URL 的正则表达式模式,使用 Pattern.matches()
方法根据此模式测试字符串,并探讨如何验证常见的 URL 方案。这个实践练习将指导你完成在 Java 应用程序中实现 URL 验证的实际步骤。
在这一步中,你将学习如何在 Java 中定义一个正则表达式模式来匹配 URL。正则表达式,通常简称为“regex”或“regexp”,是用于定义搜索模式的字符序列。它们在字符串的模式匹配和操作方面非常强大。
对于验证 URL,正则表达式模式可以帮助我们检查给定的字符串是否遵循 URL 的标准结构(例如 http://www.example.com
或 https://example.org/path
)。
让我们创建一个新的 Java 文件来处理正则表达式。
打开 WebIDE。在左侧的文件资源管理器中,确保你位于 ~/project
目录下。
在 ~/project
目录的空白处右键单击,然后选择“新建文件”。
将新文件命名为 UrlValidator.java
,然后按回车键。
UrlValidator.java
文件应该会在代码编辑器中打开。
将以下 Java 代码复制并粘贴到编辑器中:
import java.util.regex.Pattern;
public class UrlValidator {
public static void main(String[] args) {
// Define a simple regex pattern for a URL
String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";
// Compile the regex pattern
Pattern pattern = Pattern.compile(urlRegex);
System.out.println("URL Regex Pattern Defined.");
}
}
让我们来分析一下这段代码的新部分:
import java.util.regex.Pattern;
:这行代码导入了 Pattern
类,它是 Java 内置的正则表达式支持的一部分。String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";
:这行代码定义了一个名为 urlRegex
的 String
变量,并为其赋值我们的正则表达式模式。
^
:匹配字符串的开头。(http|https)
:匹配“http”或“https”。://
:匹配字面字符“://”。[^\\s/$.?#]
:匹配任何不是空白字符 (\\s
)、斜杠 (/
)、美元符号 ($
)、句点 (.
)、问号 (?
) 或井号 (#
) 的字符。这是一种简化的匹配域名部分的方法。.
:匹配任何字符(换行符除外)。[^\\s]*
:匹配零个或多个非空白字符。这是一种简化的匹配 URL 路径和查询的其余部分的方法。$
:匹配字符串的结尾。s
前面的双反斜杠 (\\
)。在 Java 字符串中,单个反斜杠是转义字符,因此我们需要使用 \\
来表示正则表达式模式中的字面反斜杠。Pattern pattern = Pattern.compile(urlRegex);
:这行代码将正则表达式字符串编译成一个 Pattern
对象。如果你打算多次使用相同的模式,编译模式会更高效。System.out.println("URL Regex Pattern Defined.");
:这行代码只是在控制台打印一条消息,表明模式已定义。保存文件(Ctrl+S 或 Cmd+S)。
现在,让我们编译这个 Java 程序。打开 WebIDE 底部的终端。确保你位于 ~/project
目录下。
使用 javac
命令编译代码:
javac UrlValidator.java
如果没有错误,命令将在没有输出的情况下完成。~/project
目录中会创建一个 UrlValidator.class
文件。
使用 java
命令运行编译后的程序:
java UrlValidator
你应该会看到以下输出:
URL Regex Pattern Defined.
你已经成功定义并编译了一个包含基本 URL 正则表达式模式的 Java 程序。在下一步中,我们将使用这个模式来测试不同的字符串是否为有效的 URL。
在上一步中,我们定义了一个用于 URL 的正则表达式模式,并将其编译成了一个 Pattern
对象。现在,让我们使用这个模式,通过 Pattern.matches()
方法来检查不同的字符串是否为有效的 URL。
Pattern.matches(regex, input)
方法是一种便捷的方式,用于检查整个输入字符串是否与给定的正则表达式匹配。它会在一个步骤中编译正则表达式并将输入与之进行匹配。
让我们修改 UrlValidator.java
文件,以测试一些示例 URL。
如果 UrlValidator.java
文件尚未在 WebIDE 编辑器中打开,请打开它。
修改 main
方法,加入以下代码。你需要在 Pattern pattern = Pattern.compile(urlRegex);
这一行之后添加此代码。
import java.util.regex.Pattern;
public class UrlValidator {
public static void main(String[] args) {
// Define a simple regex pattern for a URL
String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";
// Compile the regex pattern
Pattern pattern = Pattern.compile(urlRegex);
// Test some URLs
String url1 = "http://www.example.com";
String url2 = "https://example.org/path/to/page";
String url3 = "ftp://invalid-url.com"; // Invalid scheme
String url4 = "http:// example.com"; // Invalid character (space)
System.out.println("\nTesting URLs:");
boolean isUrl1Valid = Pattern.matches(urlRegex, url1);
System.out.println(url1 + " is valid: " + isUrl1Valid);
boolean isUrl2Valid = Pattern.matches(urlRegex, url2);
System.out.println(url2 + " is valid: " + isUrl2Valid);
boolean isUrl3Valid = Pattern.matches(urlRegex, url3);
System.out.println(url3 + " is valid: " + isUrl3Valid);
boolean isUrl4Valid = Pattern.matches(urlRegex, url4);
System.out.println(url4 + " is valid: " + isUrl4Valid);
}
}
以下是我们添加的内容:
String
变量 (url1
、url2
、url3
、url4
),包含不同的示例字符串,其中一些是符合我们简单模式的有效 URL,而另一些则是无效的。Pattern.matches(urlRegex, url)
方法。如果整个字符串与 urlRegex
模式匹配,该方法返回 true
,否则返回 false
。保存 UrlValidator.java
文件。
在终端中编译修改后的代码:
javac UrlValidator.java
同样,如果编译成功,将不会有输出。
运行编译后的程序:
java UrlValidator
你应该会看到类似于以下的输出:
URL Regex Pattern Defined.
Testing URLs:
http://www.example.com is valid: true
https://example.org/path/to/page is valid: true
ftp://invalid-url.com is valid: false
http:// example.com is valid: false
这个输出表明,我们的简单正则表达式模式正确地将前两个字符串识别为有效 URL(根据该模式),将后两个识别为无效 URL。
你现在已经成功地在 Java 中使用 Pattern.matches()
方法,根据正则表达式模式测试字符串了。
在前面的步骤中,我们定义了一个简单的正则表达式模式,并使用 Pattern.matches()
方法对其进行了测试。目前我们的模式仅能验证以 http
或 https
开头的 URL。然而,URL 还可以使用其他协议,如 ftp
、mailto
、file
等。
在这一步中,我们将修改正则表达式模式,以包含更多常见的 URL 协议。一个更强大的 URL 正则表达式模式相当复杂,但为了演示目的,我们可以扩展当前的模式,使其包含更多常见的协议。
让我们更新 UrlValidator.java
文件。
在 WebIDE 编辑器中打开 UrlValidator.java
文件。
修改 urlRegex
字符串,除了 http
和 https
之外,还包含 ftp
和 mailto
协议。我们还将添加一个针对 ftp
URL 的测试用例。
将以下代码行:
String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";
替换为:
String urlRegex = "^(http|https|ftp|mailto)://[^\\s/$.?#].[^\\s]*$";
注意,我们只是在表示分组的括号 ()
内添加了 |ftp|mailto
,|
符号充当“或”运算符。这意味着该模式现在将匹配以 http
、https
、ftp
或 mailto
开头,后跟 ://
的字符串。
为 FTP URL 添加一个新的测试用例。在 url4
的定义之后添加以下代码行:
String url5 = "ftp://ftp.example.com/files"; // Valid FTP URL
在对 url4
进行验证之后,添加对 url5
的验证:
boolean isUrl5Valid = Pattern.matches(urlRegex, url5);
System.out.println(url5 + " is valid: " + isUrl5Valid);
现在,你完整的 main
方法应该如下所示:
import java.util.regex.Pattern;
public class UrlValidator {
public static void main(String[] args) {
// Define a simple regex pattern for a URL including more schemes
String urlRegex = "^(http|https|ftp|mailto)://[^\\s/$.?#].[^\\s]*$";
// Compile the regex pattern
Pattern pattern = Pattern.compile(urlRegex);
System.out.println("URL Regex Pattern Defined.");
// Test some URLs
String url1 = "http://www.example.com";
String url2 = "https://example.org/path/to/page";
String url3 = "invalid-url.com"; // Invalid (missing scheme)
String url4 = "http:// example.com"; // Invalid character (space)
String url5 = "ftp://ftp.example.com/files"; // Valid FTP URL
System.out.println("\nTesting URLs:");
boolean isUrl1Valid = Pattern.matches(urlRegex, url1);
System.out.println(url1 + " is valid: " + isUrl1Valid);
boolean isUrl2Valid = Pattern.matches(urlRegex, url2);
System.out.println(url2 + " is valid: " + isUrl2Valid);
boolean isUrl3Valid = Pattern.matches(urlRegex, url3);
System.out.println(url3 + " is valid: " + isUrl3Valid);
boolean isUrl4Valid = Pattern.matches(urlRegex, url4);
System.out.println(url4 + " is valid: " + isUrl4Valid);
boolean isUrl5Valid = Pattern.matches(urlRegex, url5);
System.out.println(url5 + " is valid: " + isUrl5Valid);
}
}
保存 UrlValidator.java
文件。
在终端中编译更新后的代码:
javac UrlValidator.java
运行编译后的程序:
java UrlValidator
现在你应该会看到类似以下的输出,其中 FTP URL 也被标记为有效:
URL Regex Pattern Defined.
Testing URLs:
http://www.example.com is valid: true
https://example.org/path/to/page is valid: true
invalid-url.com is valid: false
http:// example.com is valid: false
ftp://ftp.example.com/files is valid: true
你已经成功修改了正则表达式模式,使其包含更多常见的 URL 协议,并对更新后的模式进行了测试。这展示了你如何调整正则表达式模式以匹配更广泛的输入。
在这个实验中,我们首先学习了如何在 Java 中定义一个专门用于验证 URL 的正则表达式模式。我们创建了一个新的 Java 文件 UrlValidator.java
,并导入了 java.util.regex.Pattern
类。然后,我们定义了一个 String
变量 urlRegex
,其中包含一个基本的正则表达式模式,该模式用于匹配以 "http" 或 "https" 开头,后跟 "://" 的字符串,并使用 Pattern.compile()
方法编译了这个模式。这第一步着重于搭建必要的工具,并利用 Java 内置的正则表达式功能定义了用于 URL 验证的核心模式。