Java正则表达式元字符

6
我找到了这个帖子,并且其中一位用户发布了下面这行代码:
String[] digits2 = number.split("(?<=.)");

我咨询了一些资源,例如12,来解释这段代码的含义,但我无法理解。有人可以解释一下split()方法中的参数是什么吗?编辑: 对于与我有同样问题的人,这是另一个有用的链接
2个回答

4
这是一个正向后行断言。整个表达式的意思是“在任何字符之后,但不捕获任何内容”。基本上,如果字符串看起来像
ABC

然后匹配将在字符之间的|处发生。
A|B|C|

我知道“.”可以匹配除了换行符以外的任何字符,但在这个上下文中,“<=”是什么意思? - Haque1
1
@Haque1 这是一系列元字符,告诉表达式“.”不应该捕获任何内容。引擎需要看到那个字符,但不应从流中删除该字符。 - Sergey Kalinichenko
1
@Haque1 这是一种不寻常的后顾之忧用法。更常见的方式是这样的:(?<=tag:)"[^"]*"。该表达式仅在引号括起来的字符串前面有 tag: 字符串时才匹配。 - Sergey Kalinichenko

1

.split("")(在空字符串/模式上)将匹配正则表达式开头的空字符串。这是一个不必要的额外空字符串字符。(?<=.)是一个零宽度断言(不消耗任何字符),它匹配零宽度空格后跟任何字符(因为它是后顾)。这会在每个字符之间拆分空字符串,但不会在第一个字符和字符串开头之间的空字符串上进行拆分。


这里使用“零宽度空格”一词是错误的;那是另一回事 - Cairnarvon
@Cairnarvon 感谢您指出这一点...您更喜欢哪个术语? - Explosion Pills
我想说“字符边界”,但这也不是完全正确的。老实说,我不确定。 - Cairnarvon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接