匹配特定字符前后的正则表达式

Regex that matches before and after certain characters

我正在尝试制作一个定界符正则表达式(与 java.util.Scanner 一起使用),它在空格上分割字符串,并将冒号、左括号和右括号保留为单独的标记。也就是说,foo(a:b) 应该分割成标记 foo(a:b)。 =18=]

我目前最大的努力是 "\s+|(?=[(:])|(?<=[:)])" 模式,出于某种原因我无法理解它在左括号之后和右括号之前无法匹配,但在冒号两边都匹配得很好。

如果您想要所有这些单独的部分,您可以扩展字符 类 断言左侧的字符 [(:)] 之一,如果这是整个字符串,则断言其中一个字符[(:]在右边。

如果还想匹配最后一个右括号后的位置,两个字符类可以相同[(:)]

\s+|(?=[(:)])|(?<=[(:])

Regex demo | Java demo

示例代码

String s = "foo(a:b)";
Scanner scanner = new Scanner(s).useDelimiter("\s+|(?=[(:)])|(?<=[(:])");
while(scanner.hasNext())
{
    System.out.println(scanner.next());
}

输出

foo
(
a
:
b
)