Java 拆分函数调用中的正则表达式问题

Java regex expression trouble in split function call

我在 java 中创建正则表达式时遇到一些问题,我希望它匹配具有单个 ; 和 none 的字符串的所有部分;; 在字符串中。

例如在字符串 today;i;;drank water 中,今天之后的 ; 将是一个匹配项,而 ;; 将不是一个匹配项。到目前为止,我已经尝试使用正则表达式 ;{1} 来表示如果只有一个 ; 就匹配。

但是它一直匹配双 ;;。正则表达式 ;{1,2} 也是如此,表示匹配一个 ; 但不匹配两个或更多 ;。两个正则表达式都是 greedy 类型。我还使用带有 String.split(regular expression) java 函数的正则表达式。

任何人都可以帮助解决可能出现的问题,或者如果我对正则表达式形成的理解有点偏离为什么我的正则表达式不能正常工作?

另外请注意,我从拆分中得到的输出是 today;i;;drank water

today
i

drank water

如果拆分数组字符串中有空格,则为第 3 个元素。

您可以使用以下表达式:\b;\b。提供了一个示例 here.

String str = "today;i;;drank water";
        String[] split = str.split("\b;\b");
        for(String s : split)
            System.out.println(s);

产量:

today
i;;drank water

另一种方法是使用负数 lookahead/lookbehind:

(?<!;);(?!;)

这意味着:前面没有分号,后面也没有分号。

实例:https://regex101.com/r/cB7oJ7/1