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

时间:2017-12-03 11:20:17

标签: java

我对代码(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)")背后的逻辑感到困惑 它将数字和字母分隔为输入字符串abc12dc23,然后将其拆分为输出abc 12 dc 23

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

1 个答案:

答案 0 :(得分:5)

这个正则表达式:

(?<=\D)(?=\d)|(?<=\d)(?=\D)

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

这种模式:

(?<=\D)(?=\d)

和这种模式:

(?<=\d)(?=\D)

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

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

split方法查找模式的所有匹配项,并在找到时将其拆分。