只有当所有字符串都使用正则表达式引用时,是否有一种方法可以返回拆分的分隔符?
考虑到字符串应该用“-”分割。
使用 ((?<=")-(?="))
它匹配 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
如果字符串与 ^"[\da-z\-"]*"$
匹配,我想应用 2 个正则表达式我会用 ((?<=")-(?="))
应用拆分但我觉得有一种方法我还没有尝试过。
最佳答案
如果您想返回定界符周围的值,您可以结合使用捕获组和 \G
anchor 。
\G("[^"]*")(?=(?:-"[^"]*")*$)(?:-|$)
解释
\G
断言位置在上一个匹配项的末尾或字符串的开头("[^"]*")
从一个双引号匹配到一个双引号(?=(?:-"[^"]*")*$)
断言-".."
的可选部分在右边直到结束字符串(?:-|$)
匹配-
或字符串结尾
查看 Regex demo或 Java demo
在带有双反斜杠的 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"
关于java - 仅当所有字符串都被引用时才用于拆分的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65446558/