字符串a [] = s.split("(?<= \\ D)(?= \\ d)|(?<= \\ d)(?= \\ D)"); 在java中

-3 java

我混淆了代码背后的逻辑,(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)") 它将数字和字母分开,如输入字符串,abc12dc23然后它将它作为输出分割abc 12 dc 23.

我只想解释上面的代码是如何工作的?

Swe*_*per 5

这个正则表达式:

(?<=\D)(?=\d)|(?<=\d)(?=\D)
Run Code Online (Sandbox Code Playgroud)

匹配2种模式,如|字符所示:

这种模式:

(?<=\D)(?=\d)
Run Code Online (Sandbox Code Playgroud)

而这种模式:

(?<=\d)(?=\D)
Run Code Online (Sandbox Code Playgroud)

前者在字符串中查找一个位置,该位置在该位置之前有一个非digit(\D)字符,\d后面有一个数字().后者寻找反向发生的位置,前面的数字和后面的非数字.

要以更抽象的方式说这个,正则表达式正在寻找数字 - 非数字边界.

split方法查找模式的所有匹配项,并在找到该字符串时拆分该字符串.