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

时间:2015-05-11 12:27:06

标签: java regex string split regex-greedy

我在java中创建一个正则表达式时遇到了一些麻烦,我想让它匹配字符串中只有;且字符串中没有;;的所有部分。

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

但它会保持匹配双;;。同样适用于正则表达式;{1,2},它表示匹配一个;但不匹配两个或更多;。两个正则表达式都是贪婪类型。此外,我正在使用带有String.split(regular expression) java函数的正则表达式。

任何人都可以帮助解决可能出现问题的情况,或者我对正则表达式形成的理解是否有点因为我的正则表达式无法正常工作?

另外值得注意的是,我从分割得到的输出就像today;i;;drank water

一样
today
i

drank water

是分裂数组字符串中的空白时的第3个元素。

2 个答案:

答案 0 :(得分:1)

您可以使用以下表达式:\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

答案 1 :(得分:1)

另一种方法是使用负向前瞻/后视:

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

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

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