只有在使用正则表达式对所有字符串都加引号的情况下,才有办法返回分隔符的分隔符吗?
考虑到字符串应以“-”分隔。
使用((?<=")-(?="))
它与2匹配,-
以下示例可以"abc"-"123"-"zxc"
。
但是-
当不应该检测到正则表达式匹配以下样本中的2时-
:
abc"-"123"-"zxc"
"abc"-"123"-"zxc
使用-(?=([^"]*"[^"]*")*[^"]*$)
它可以匹配2,-
并且可以使用以下示例:"abc"-"123"-"zxc"
。
它-
与以下示例中的任何一个都不匹配,也可以:
"abc"-"123"-"zxc
"abc"-"123"-zxc"
但是-
当不应该检测到正则表达式匹配以下样本中的2时-
:
abc"-"123"-"zxc"
abc-"123"-"zxc"
"abc"-"123"-zxc
我当时正在考虑使用2个正则表达式,如果字符串匹配,^"[\da-z\-"]*"$
我将使用split,((?<=")-(?="))
但是我觉得我还没有尝试过一种方法。
如果要返回定界符周围的值,则可以结合使用捕获组和\G
锚点。
\G("[^"]*")(?=(?:-"[^"]*")*$)(?:-|$)
说明
\G
在上一个比赛的末尾或字符串的开头声明位置("[^"]*")
从双引号匹配到双引号(?=(?:-"[^"]*")*$)
断言-".."
右边的可选部分,直到字符串结尾(?:-|$)
匹配-
或字符串末尾在Java中,反斜杠加倍:
String regex = "\\G(\"[^\"]*\")(?=(?:-\"[^\"]*\")*$)(?:-|$)";
例如
String strings[] = {
"\"abc\"-\"123\"-\"zxc1\"",
"\"abc\"-\"123\"-\"zxc2",
"\"abc\"-\"123\"-zxc3\"",
"abc\"-\"123\"-\"zxc4\"",
"\"abc\"-\"123\"-\"zxc5",
"abc\"-\"123\"-\"zxc6\"",
"abc-\"123\"-\"zxc7\"",
"\"abc\"-\"123\"-zxc8"
};
String regex = "\\G(\"[^\"]*\")(?=(?:-\"[^\"]*\")*$)(?:-|$)";
Pattern pattern = Pattern.compile(regex);
for (String s : strings) {
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println(matcher.group(i));
}
}
}
输出量
"abc"
"123"
"zxc1"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句