Java Matcher.matches() 方法
上次修改时间:2025 年 4 月 20 日
java.util.regex.Matcher
类的 matches
方法尝试将整个输入序列与模式匹配。如果整个输入序列与模式匹配,则返回 true,否则返回 false。
与寻找部分匹配的 find
方法不同,matches
要求整个输入都与模式匹配。此方法通常用于需要完整模式匹配的验证任务。
matches() 的基本用法
使用 matches
的最简单方法是使用已编译的模式和输入字符串。只有当整个字符串完全匹配正则表达式模式时,该方法才返回 true。
package com.zetcode; import java.util.regex.Pattern; import java.util.regex.Matcher; public class BasicMatch { public static void main(String[] args) { String input = "hello123"; Pattern pattern = Pattern.compile("^[a-z]+\\d{3}$"); Matcher matcher = pattern.matcher(input); boolean isMatch = matcher.matches(); System.out.println("Does '" + input + "' match the pattern? " + isMatch); // Test another string input = "hello12"; matcher = pattern.matcher(input); System.out.println("Does '" + input + "' match the pattern? " + matcher.matches()); } }
在这个例子中,我们创建了一个模式,它期望小写字母后跟三个数字。第一个测试字符串完全匹配此模式。第二个字符串失败,因为它末尾只有两个数字。
使用 matches() 进行电子邮件验证
matches
的一个常见用例是验证电子邮件地址。该方法确保整个输入符合电子邮件模式结构。
package com.zetcode; import java.util.regex.Pattern; import java.util.regex.Matcher; public class EmailValidation { public static void main(String[] args) { String emailRegex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$"; Pattern pattern = Pattern.compile(emailRegex); String[] emails = { "user@example.com", "invalid.email", "another.user@test.org", "missing@dotcom" }; for (String email : emails) { Matcher matcher = pattern.matcher(email); System.out.println(email + " is valid: " + matcher.matches()); } } }
此示例演示了使用 matches
进行电子邮件验证。正则表达式检查基本的电子邮件格式。只有从开始到结束完全匹配该模式的字符串才会返回 true。
电话号码格式
matches
可以验证电话号码是否遵循特定的格式规则。这通过要求完全的模式匹配来确保一致的数据输入。
package com.zetcode; import java.util.regex.Pattern; import java.util.regex.Matcher; public class PhoneNumberCheck { public static void main(String[] args) { String phoneRegex = "^\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$"; Pattern pattern = Pattern.compile(phoneRegex); String[] phones = { "123-456-7890", "(123) 456-7890", "123.456.7890", "1234567890", "123-45-6789" }; for (String phone : phones) { Matcher matcher = pattern.matcher(phone); System.out.println(phone + " is valid: " + matcher.matches()); } } }
该模式接受各种常见的电话号码格式。最后一个测试用例失败,因为它不匹配预期的 3-3-4 位数字分组模式。matches
确保整个字符串符合该格式。
密码强度检查
使用 matches
,我们可以通过要求特定的字符组合来强制执行密码策略。此示例检查最低强度要求。
package com.zetcode; import java.util.regex.Pattern; import java.util.regex.Matcher; public class PasswordStrength { public static void main(String[] args) { // At least 8 chars, one uppercase, one lowercase, one digit, one special String pwRegex = "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"; Pattern pattern = Pattern.compile(pwRegex); String[] passwords = { "StrongPass1!", "weakpass", "NoSpecialChar1", "short1!", "ALLUPPERCASE1!" }; for (String pw : passwords) { Matcher matcher = pattern.matcher(pw); System.out.println(pw + " is strong: " + matcher.matches()); } } }
正则表达式使用正向预查来强制执行每个要求。只有第一个密码满足所有条件。matches
确保整个密码字符串符合所有规则。
日期格式验证
matches
非常适合验证日期格式。此示例检查 ISO 8601 (YYYY-MM-DD) 格式的日期,同时也验证日期值。
package com.zetcode; import java.util.regex.Pattern; import java.util.regex.Matcher; public class DateValidation { public static void main(String[] args) { String dateRegex = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$"; Pattern pattern = Pattern.compile(dateRegex); String[] dates = { "2023-05-15", "2023-13-01", // Invalid month "2023-02-30", // Invalid day for February "15-05-2023", // Wrong format "2023-05-15T12:00:00" // Includes time }; for (String date : dates) { Matcher matcher = pattern.matcher(date); System.out.println(date + " is valid: " + matcher.matches()); } } }
该模式验证结构,但不检查所有日历规则。只有第一个日期完全匹配该模式。请注意,这并不能验证所有可能的无效日期(例如 4 月 31 日)。
URL 验证
使用 matches
进行 URL 验证可确保字符串遵循正确的 URL 格式规则。此示例检查常见的 URL 模式。
package com.zetcode; import java.util.regex.Pattern; import java.util.regex.Matcher; public class UrlValidation { public static void main(String[] args) { String urlRegex = "^(https?|ftp)://[^\\s/$.?#].[^\\s]*$"; Pattern pattern = Pattern.compile(urlRegex); String[] urls = { "http://example.com", "https://www.example.com/path", "ftp://files.example.com", "example.com", // Missing protocol "http://example.com?query=test", "invalid url" }; for (String url : urls) { Matcher matcher = pattern.matcher(url); System.out.println(url + " is valid: " + matcher.matches()); } } }
正则表达式检查所需的 URL 组件,如协议和域。只有从开始到结束匹配该模式的完整 URL 才会验证。该模式可以增强以满足更具体的要求。
信用卡号码验证
matches
可以验证信用卡号码格式,同时执行 Luhn 校验以进行基本有效性检查。这结合了模式匹配和算法验证。
package com.zetcode; import java.util.regex.Pattern; import java.util.regex.Matcher; public class CreditCardValidation { public static void main(String[] args) { // Visa, MasterCard, Amex, Discover patterns String ccRegex = "^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|" + "3[47][0-9]{13}|6(?:011|5[0-9]{2})[0-9]{12})$"; Pattern pattern = Pattern.compile(ccRegex); String[] cards = { "4111111111111111", // Valid Visa "5500000000000004", // Valid MasterCard "340000000000009", // Valid Amex "1234567890123456", // Invalid "6011000000000004", // Valid Discover "378282246310005" // Valid Amex }; for (String card : cards) { Matcher matcher = pattern.matcher(card); System.out.println(card + " is valid format: " + matcher.matches()); } } }
此示例检查主要的信用卡模式。正则表达式验证格式,但不验证卡的实际有效性。对于生产环境,需要额外的 Luhn 算法验证。
来源
在本教程中,我们通过实际示例探讨了 matches
方法。此方法对于 Java 应用程序中的完整模式匹配验证至关重要。
作者
列出所有Java教程。