# Java 正则表达式匹配 ## Java正则表达式教程 - Java正则表达式匹配 \`Matcher \`类对字符序列执行匹配通过解释在\` Pattern \`对象中定义的编译模式。 \`Pattern \`类的\` matcher()\`方法创建一个实例的\` Matcher \`类。 \`\`\` import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String\[\] args) { String regex = "\[a-z\]@."; Pattern p = Pattern.compile(regex); String str = "abc@yahoo.com,123@cnn.com,abc@google.com"; Matcher m = p.matcher(str); } } \`\`\` 匹配器的以下方法执行匹配。 - find() method - start() method - end() method - group() method ## find()方法 \`find()\`方法找到输入中的模式的匹配。 如果find成功,它返回true。否则,它返回false。 第一次调用\` find()\`在输入的开始处开始搜索。下一个调用将在上一次匹配后开始搜索。 我们可以使用while循环与\` find()\`方法来查找所有的匹配。 \`find()\`方法是一个重载的方法。find()方法的另一个版本接受一个整数参数,这是开始查找匹配的偏移量。 ## start()方法 \`find()\`方法返回上一次匹配的开始索引。 它在成功的find()方法调用之后使用。 ## end()方法 \`end()\`方法返回匹配字符串中最后一个字符的索引加一。 匹配后,\` str.substring(m.start(),m.end())\`给出匹配的字符串。 \`\`\` import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String\[\] args) { String regex = "\[a-z\]@."; Pattern p = Pattern.compile(regex); String str = "abc@yahoo.com,123@cnn.com,abc@google.com"; Matcher m = p.matcher(str); if (m.find()) { String foundStr = str.substring(m.start(), m.end()); System.out.println("Found string is:" + foundStr); } } } \`\`\` 上面的代码生成以下结果。 !\[img\](https://atts.w3cschool.cn/attachments/jimg/java_regular_expression/END_METHOD__432BACDBB1C404DDBC97.png) ## group()方法 group()方法通过前一个成功的find()方法调用返回找到的字符串。 \`\`\` import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String\[\] args) { String regex = "\[a-z\]@."; Pattern p = Pattern.compile(regex); String str = "abc@yahoo.com,123@cnn.com,abc@google.com"; Matcher m = p.matcher(str); if (m.find()) { String foundStr = m.group(); System.out.println("Found text is:" + foundStr); } } } \`\`\` 上面的代码生成以下结果。 !\[img\](https://atts.w3cschool.cn/attachments/jimg/java_regular_expression/GROUP_METHOD__985A9EE2E6F3870D6741.png) ## 例子 \`\`\` import java.util.regex.Pattern; import java.util.regex.Matcher; public class Main { public static void main(String\[\] args) { String regex = "\[abc\]@."; String source = "abc@example.com"; findPattern(regex, source); } public static void findPattern(String regex, String source) { Pattern p = Pattern.compile(regex); Matcher m = p.matcher(source); System.out.println("Regex:" + regex); System.out.println("Text:" + source); while (m.find()) { System.out.println("Matched Text:" + m.group() + ", Start:" + m.start() + ", " + "End:" + m.end()); } } } \`\`\` 上面的代码生成以下结果。 !\[img\](https://atts.w3cschool.cn/attachments/jimg/java_regular_expression/EXAMPLE__485519517BD9329CA8C7.png)