首页 > Java > java教程 > 如何使用正则表达式按空格分割字符串,同时保留引用的段?

如何使用正则表达式按空格分割字符串,同时保留引用的段?

Linda Hamilton
发布: 2024-12-30 09:54:10
原创
344 人浏览过

How to Split Strings by Spaces While Preserving Quoted Segments Using Regular Expressions?

用空格分割字符串,不包括引用的段

在正则表达式领域,在保留引用段的同时按空格分割字符串的任务对于新手用户来说可能会令人畏惧。为了应对这一挑战,我们寻求一种强大的解决方案,将输入字符串准确地分成其组成元素。

提供的示例字符串呈现了一种特定情况,其中空格分隔单词,但不在单引号或双引号段内。所需的输出保留这些引用的片段,确保像“will be”或“正则表达式”这样的短语保持完整。

适合此任务的正则表达式非常简单:

[^\s"']+|"([^"]*)"|'([^']*)'
登录后复制

分解这个表达式:

  • [^s"'] :匹配不是空格、引号或单个字符的字符序列引号。
  • "([^"]*)":匹配双引号字符串,捕获第二个捕获组内的内容。
  • '([^']*)':匹配单引号字符串,捕获第三个捕获组中的内容。

要在 Java 中使用此表达式,我们可以使用以下内容code:

List<String> matchList = new ArrayList<>();
Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    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());
    }
}
登录后复制

此代码迭代输入字符串,捕获带引号和不带引号的段,从而生成拆分元素的列表。或者,我们可以使用更简单的版本:

List<String> matchList = new ArrayList<>();
Pattern regex = Pattern.compile("[^\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group());
}
登录后复制

这个简化版本包括列表中带引号和不带引号的元素。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板