原文: https://javatutorial.net/basic-java-regular-expressions

今天,我将向您展示正则表达式的基础知识以及如何在 Java 中使用它们。

这不会是详尽且详细的正则表达式教程。 正则表达式本身就是一个巨大的话题。 我将仅向您展示基础知识,因此您可以快速开始在项目中使用正则表达式。 没有冗长的解释,没有仓促……仅举几个例子,您就可以开始了。

Java 基本正则表达式 - 图1

字符串类中的正则表达式方法

Java 8 中的String类具有一些使用正则表达式(或 regex)的方法。 这是此方法的列表。 有关更多详细信息,您可以在中检查字符串 javadoc

  • boolean String.matches(String regex) – 判断此字符串是否与给定的正则表达式匹配
  • String replaceAll(String regex, String replacement) – 用给定的替换项替换与给定的正则表达式匹配的此字符串的每个子字符串
  • String replaceFirst(String regex, String replacement) – 用给定的替换替换与给定的正则表达式匹配的此字符串的第一个子字符串
  • String[] split(String regex) – 围绕给定正则表达式的匹配项拆分此字符串
  • String[] split(String regex, int limit) – 围绕给定正则表达式的匹配项拆分此字符串。 模式被“限制”应用了次数

匹配一个字符

假设我们有以下字符串:"Hello, it’s me",我们想用空格分隔其中的单词。

  1. String str = "Hello, it's me";
  2. String[] words = str.split(" ");
  3. for (String word : words) {
  4. System.out.println(word);
  5. }

这将产生以下输出

  1. Hello,
  2. it's
  3. me

但是,如果我们像这样在"it's""me"之间放置两个空格怎么办:"Hello, it’s me"

我们程序的输出将是:

  1. Hello,
  2. it's
  3. me

那么如何避免这种情况呢? 继续阅读,您会发现🙂

重复

+号表示在同一行中匹配 1 个或多个。

让我们回到前面的示例"Hello, it’s me",在"it’s""me"之间有两个空格。

在我们的代码中,我们将模式更改为+。 在这种情况下,我们将连续匹配 1 个或多个空格

  1. String str = "Hello, it's me";
  2. String[] words = str.split(" +");
  3. for (String word : words) {
  4. System.out.println(word);
  5. }

输出为:

  1. Hello,
  2. it's
  3. me

连接

使用正则表达式,我们可以连续匹配一个字符串或多个字符,并以此作为正则表达式模式。 例如,模式ing将匹配如下:

  1. "Earning money is easy as counting 1 2 33. Nah!"
  2. ***

换句话说,如果在我们的字符串中提供ing,则该字符串匹配。

结合连接和重复

模式:ar+将匹配

  1. "arrows are not as fast as bullets"
  2. *** **

匹配零个或多个

模式:"it*"将匹配

  1. "it‘s fun to learn just sitting in front of my computer"
  2. ** **** *

*(星号)将匹配i,后跟零个或多个t。 在我们的示例中,它将匹配itittii

交替

模式:ea|in将匹配

  1. "earning money is easy as counting 1 2 33. Nah!"
  2. ** ** ** **

|(竖线符号)将匹配eain

字符类

模式:[123]将匹配

  1. "Earning money is easy as counting 1 2 33. Nah!"
  2. * * **

[]匹配集合中的任何字符

匹配范围

模式:[1-3]将匹配

  1. "Earning money is easy as counting 1 2 33. Nah!"
  2. * * **

模式:[a-f]将匹配

  1. "Earning money is easy as counting 1 2 33. Nah!"
  2. * * * * *

排除字符

模式:[^a-z123]将匹配

  1. "Earning money is easy as counting 1 2 33. Nah!"
  2. * * * *

^表示此集合中没有任何字符

验证电子邮件地址正则表达式

我将举一个示例,说明如何使用 Java 验证电子邮件地址。 这更复杂,但常用的正则表达式模式:

  1. ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;

和实现:

  1. String email = "info@javatutorial.net";
  2. if (email.matches("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;")) {
  3. System.out.println(email + "is a valid e-mail address");
  4. } else {
  5. System.out.println(email + "is invalid e-mail address");
  6. }