Java 不带前一个字符的字符的正则表达式匹配

Java 不带前一个字符的字符的正则表达式匹配,java,regex,Java,Regex,我有以下字符串: “位置字符串:位置字符串:位置-C:\string” 我想将其分为以下三个字符串: location-stringlocation-stringlocation-C?:\string 使用String.split(regex)时,正则表达式应该是什么 基本上,我想在冒号“:”字符上拆分,但前面有“?”字符的字符除外 提前感谢,, PM.您可以使用反向查找。它匹配的冒号前面没有? (?<!\?): (? Java正则表达式是 "(?<!\\?):" ”(?您可以使

我有以下字符串:

“位置字符串:位置字符串:位置-C:\string”

我想将其分为以下三个字符串:

location-string
location-string
location-C?:\string

使用String.split(regex)时,正则表达式应该是什么

基本上,我想在冒号“:”字符上拆分,但前面有“?”字符的字符除外

提前感谢,,
PM.

您可以使用反向查找。它匹配的冒号前面没有

(?<!\?):
(?
Java正则表达式是

"(?<!\\?):"

”(?您可以使用负数lookback。它匹配未在
前面的冒号

(?<!\?):
(?
Java正则表达式是

"(?<!\\?):"

(?您可以使用带有限制的
split()

public static void main(String[] args) {
    String s = "location-string:location-string:location-C?:\\string";
    System.out.println(Arrays.toString(s.split(":", 3))); 
}
O/p:


您可以使用带有限制的
split()

public static void main(String[] args) {
    String s = "location-string:location-string:location-C?:\\string";
    System.out.println(Arrays.toString(s.split(":", 3))); 
}
O/p:


最令人遗憾的是,这是基于只发生在非常特殊的位置(第三个和最后一个)的特殊情况(?:)。考虑到“我想在冒号上拆分:'字符,但前面有'?'字符的字符除外”,您确定这是一个好答案吗?双反斜杠作为注释指示符?@laune-是..这与给定的字符串紧密耦合。我只是指出,这也可以通过这种方式完成。最遗憾的是,这是基于只发生在非常特殊位置(第三个和最后一个)的特殊情况(?)。你确定这是一个很好的答案吗“我想在冒号“:”上拆分字符,除了前面有“?”字符的字符之外?作为注释指示符的双反斜杠?@laune-是的..这与给定的字符串紧密耦合。我只是指出,也可以这样做。