首页 > 文章列表 > 使用正则表达式从较大的字符串中提取被单引号包围的字符串的Java程序

使用正则表达式从较大的字符串中提取被单引号包围的字符串的Java程序

单引号 字符串 java程序 正则表达式 提取
280 2023-09-06

正则表达式或正则表达式是用于模式匹配和字符串操作的语言。它由定义搜索模式的字符序列组成,可用于执行搜索、替换甚至验证文本输入等操作。正则表达式由一系列字符和符号组成,这些字符和符号构成了搜索模式。

在本文中,我们将了解如何编写一个 Java 程序,以使用正则表达式从较大的字符串中提取单引号括起来的字符串。

Java 通过 java.util.regex 包提供对正则表达式的支持。模式类表示已编译的正则表达式,而匹配器类可用于将模式与给定的输入字符串进行匹配。

用单引号括起来的单个子字符串

在下面的示例中,我们将首先定义输入字符串以及我们想要匹配的正则表达式模式。模式“(_+?)”匹配单引号和 _*? 部分括起来的任何字符序列。匹配任意字符 0 次或多次,但次数尽可能少,以便模式的其余部分能够匹配。

然后,我们根据模式创建一个 Matcher 对象,以借助 find 方法应用于输入字符串。如果模式匹配,我们使用参数为 1 的 group() 方法提取匹配的字符串,该方法代表模式中的第一个捕获组。此方法的缺点是它不能捕获所有单引号括起来的子字符串组。

示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringExtractor {
   public static void main(String[] args) {
      String input = "This is a 'single quote' enclosed string";
      Pattern pattern = Pattern.compile("'(.*?)'");
      Matcher matcher = pattern.matcher(input);
        
      if (matcher.find()) {
         String extractedString = matcher.group(1);
         System.out.println(extractedString);
      }
   }
}

输出

single quote

多个单引号括起来的子字符串

上述方法有一个主要缺点,即过于简单,无法从输入字符串中提取多个单引号括起来的子字符串,并且仅提取第一个出现的位置。这是先前方法的更新和高级版本,因为它能够提取多个事件。我们使用 while 循环来迭代并继续搜索匹配项,直到输入字符串中没有留下匹配项。匹配列表用于存储所有提取的字符串并由该方法返回。 main 方法演示了如何使用更新的 extractStringsWithRegex() 方法来提取所有单引号括起来的字符串。

示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.List;
public class StringExtractor {    
   public static List<String> extractStringsWithRegex(String input) {
      // This function takes string as input, iterates over to search for regex matches
      // and stores them in a List named matches which is finally returned in the end
      Pattern pattern = Pattern.compile("'(.*?)'");
      Matcher matcher = pattern.matcher(input);
      List<String> matches = new ArrayList<>();
      while (matcher.find()) {
         matches.add(matcher.group(1));
      }
      return matches;
   }   
   public static void main(String[] args) {
      String input = "This is a 'test' string with 'multiple' 'single quote' enclosed 'words'";
      List<String> matches = extractStringsWithRegex(input);
      for (String match : matches) {
         System.out.println(match);
      }
   }
}

输出

test
multiple
single quote
words

使用正则表达式从较大字符串中提取单引号括起来的字符串的 java 程序有一些优点和缺点,如下所示。

优点

  • 正则表达式非常强大,可以匹配单引号括起来的字符串,甚至可以匹配更复杂的模式。

  • Matcher 类为我们提供了处理匹配字符串的附加方法,例如查找匹配的开始和结束索引。

缺点

  • 与其他方法相比,编写和理解正则表达式可能更难理解。

  • 与其他方法相比,正则表达式可能会更慢,尤其是对于大型输入字符串或复杂模式。

结论

有多种方法可用于提取单引号括起来的字符串,但最常见的方法是使用正则表达式、split() 和 substring() 方法。正则表达式是强大且灵活的选项,因为它们可以处理复杂的模式,但在非常大的字符串中非常耗时。在使用正则表达式时,Pattern 类用于表示模式,Matcher 类用于将模式应用于输入字符串,然后提取匹配的文本。正则表达式有多种用例,从验证用户输入数据到操作文本。每当处理正则表达式时,仔细设计和测试模式以确保它与所需的文本匹配并很好地处理所有可能的边缘情况非常重要。