首页 > 解决方案 > 捕获不在单引号之间的分隔符

问题描述

就像问题说的那样,是否可以使用单个正则表达式字符串来获取不在某些引号之间的分隔符?

例如,我想用分隔符分割这个字符串&

"example=3&testing='f&tmp'"

应该产生

["example=3", "testing='f&tmp'"]

本质上,单引号 ( ' ') 内的内容应该保持不变。

我发现了如何用表达式在引号内获取内容:(?:'.*?')

我能得到的最接近切实解决方案的是:(.[^']&[^'])

标签: regex

解决方案


对于 a 来说这不是一件容易的事,但如果你使用它是一个String#split相当可行的任务Matcher#find

[^&\s=]+=(?:'[^']*'|[^\s&]*)

(参见这个正则表达式演示)和这个 Java 代码

String text = "example=3&testing='f&tmp'";
Pattern p = Pattern.compile("[^&\\s=]+=(?:'[^']*'|[^\\s&]*)");
Matcher m = p.matcher(text);
List<String> res = new ArrayList<>();
while(m.find()) {
    res.add(m.group());
}
System.out.println(res);
// => [example=3, testing='f&tmp']

细节

  • [^&\s=]+&- 除了,=和空格之外的一个或多个字符
  • = - 一个=字符
  • (?:'[^']*'|[^\s&]*)- 一个非捕获组,匹配''和之外的'零个或多个字符,或者除空格和 之外的零个或多个字符&

推荐阅读