匹配特定字符前后的正则表达式
Regex that matches before and after certain characters
我正在尝试制作一个定界符正则表达式(与 java.util.Scanner 一起使用),它在空格上分割字符串,并将冒号、左括号和右括号保留为单独的标记。也就是说,foo(a:b)
应该分割成标记 foo
、(
、a
、:
、b
和 )
。 =18=]
我目前最大的努力是 "\s+|(?=[(:])|(?<=[:)])"
模式,出于某种原因我无法理解它在左括号之后和右括号之前无法匹配,但在冒号两边都匹配得很好。
如果您想要所有这些单独的部分,您可以扩展字符 类 断言左侧的字符 [(:)]
之一,如果这是整个字符串,则断言其中一个字符[(:]
在右边。
如果还想匹配最后一个右括号后的位置,两个字符类可以相同[(:)]
\s+|(?=[(:)])|(?<=[(:])
示例代码
String s = "foo(a:b)";
Scanner scanner = new Scanner(s).useDelimiter("\s+|(?=[(:)])|(?<=[(:])");
while(scanner.hasNext())
{
System.out.println(scanner.next());
}
输出
foo
(
a
:
b
)
我正在尝试制作一个定界符正则表达式(与 java.util.Scanner 一起使用),它在空格上分割字符串,并将冒号、左括号和右括号保留为单独的标记。也就是说,foo(a:b)
应该分割成标记 foo
、(
、a
、:
、b
和 )
。 =18=]
我目前最大的努力是 "\s+|(?=[(:])|(?<=[:)])"
模式,出于某种原因我无法理解它在左括号之后和右括号之前无法匹配,但在冒号两边都匹配得很好。
如果您想要所有这些单独的部分,您可以扩展字符 类 断言左侧的字符 [(:)]
之一,如果这是整个字符串,则断言其中一个字符[(:]
在右边。
如果还想匹配最后一个右括号后的位置,两个字符类可以相同[(:)]
\s+|(?=[(:)])|(?<=[(:])
示例代码
String s = "foo(a:b)";
Scanner scanner = new Scanner(s).useDelimiter("\s+|(?=[(:)])|(?<=[(:])");
while(scanner.hasNext())
{
System.out.println(scanner.next());
}
输出
foo
(
a
:
b
)