首页 >Java >java教程 >如何使用正则表达式使用空格分割字符串,同时忽略引号内的空格?

如何使用正则表达式使用空格分割字符串,同时忽略引号内的空格?

Susan Sarandon
Susan Sarandon原创
2024-12-16 17:25:15432浏览

How to Split a String Using Spaces While Ignoring Spaces Within Quotes Using Regex?

使用空格分割字符串的正则表达式

在处理字符串时,我们经常需要将它们分割成单独的单词进行分析或处理。但是,引用文本中的空格(例如“这是一个字符串”)不应被视为分隔符。正则表达式 (Regex) 提供了一种强大的方法来处理此类复杂的拆分任务。

问题:

创建一个 Regex 表达式以使用空格拆分字符串,忽略周围的空格通过单人或双人引号。

示例:

输入:“这是一个当您的‘正则表达式’匹配某些内容时‘将’突出显示的字符串。”

期望的输出:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.

答案:

虽然提供的 (?!") 表达式没有正确分割,但可以将一个全面的正则表达式表述如下:

这个表达式有效地捕捉了两种类型elements:

  • 未引用的单词: [^s"'] 匹配不带空格或引号的字符序列。
  • 引用的文本:

    • /"([^"]*)"/ 匹配双引号文本,不包括引号。
    • /'([^']*)'/ 类似地匹配单引号文本,不包括引号。

Java 实现:

以下 Java 代码说明了如何应用此正则表达式来拆分string:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexSplitter {

    public static void main(String[] args) {
        String subjectString = "This is a string that \"will be\" highlighted when your 'regular expression' matches something.";

        // Pattern that matches unquoted words, quoted texts, and the capturing groups
        Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
        Matcher regexMatcher = regex.matcher(subjectString);

        // List to store the split words
        List<String> matchList = new ArrayList<>();

        while (regexMatcher.find()) {
            // Check for capturing groups to exclude quotes
            if (regexMatcher.group(1) != null) {
                // Add double-quoted string without the quotes
                matchList.add(regexMatcher.group(1));
            } else if (regexMatcher.group(2) != null) {
                // Add single-quoted string without the quotes
                matchList.add(regexMatcher.group(2));
            } else {
                // Add unquoted word
                matchList.add(regexMatcher.group());
            }
        }

        // Display the split words
        for (String word : matchList) {
            System.out.println(word);
        }
    }
}

输出:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something

这个增强的讨论澄清了问题并提供了更准确和更全面的正则表达式,以及详细的 Java 实现演示其用法。

以上是如何使用正则表达式使用空格分割字符串,同时忽略引号内的空格?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn