regex - 捕获不在单引号之间的分隔符
问题描述
就像问题说的那样,是否可以使用单个正则表达式字符串来获取不在某些引号之间的分隔符?
例如,我想用分隔符分割这个字符串&
:
"example=3&testing='f&tmp'"
应该产生
["example=3", "testing='f&tmp'"]
本质上,单引号 ( ' '
) 内的内容应该保持不变。
我发现了如何用表达式在引号内获取内容:(?:'.*?')
我能得到的最接近切实解决方案的是:(.[^']&[^'])
解决方案
对于 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&]*)
- 一个非捕获组,匹配'
除'
和之外的'
零个或多个字符,或者除空格和 之外的零个或多个字符&
。
推荐阅读
- python - 如何访问字节数组文件的某些字节?
- odoo - 是否可以在 openerp v8 中按一种产品类别开始新库存,例如 odoo 10
- ios - 当我将范围切换到月份时,FSCalendar 内容被压缩
- java - 为什么在 Eclipse 的动态 Web 项目中出现此错误?
- javascript - 将日期对象转换为 Firestore 时间戳
- schema - GraphQL,Apollo:创建高效的模式
- c# - 如何使用 C# 启动以前停止的 Azure 容器实例?
- typescript - React Native SectionList:什么是正确的 TypeScript 类型
- javascript - 如何在不禁用 IE11 上的拼写检查的情况下禁用 textarea 中的自动更正?
- python-3.x - sanic.exceptions.RequestTimeout:Sanic 中的请求超时