如何在数字模式之间允许特定的分隔符

时间:2019-07-04 11:47:06

标签: java regex

我有一个很大的Java正则表达式模式,该模式由OR({|)连接的多个子模式组成。我想在数字之间的任何地方允许多个定界符。

例如,我具有以下模式"(3[47][0-9]{13})|(56022[1-5][0-9]{10}|(5610)[0-9]{12})"。我如何允许以下定界符:等于({=),反斜杠(\),点(.),连字符(-)和空格({{ 1}})。

这些定界符可以出现在任何与数字模式匹配的数字之间(起始和结束除外),并且可以出现在数字之间的任何次数。

1 个答案:

答案 0 :(得分:0)

您将必须在所有数字之间插入[\s=\\.-]*模式(它匹配零个或多个空格,=\.-)匹配模式并将\d{X}转换为\d(?:[\s=\\.-]*\d){X-1}模式:

(3[\s=\\.-]*[47][\s=\\.-]*[0-9](?:[\s=\\.-]*[0-9]){12})|(5[\s=\\.-]*6[\s=\\.-]*0[\s=\\.-]*2[\s=\\.-]*2[\s=\\.-]*[1-5][\s=\\.-]*[0-9](?:[\s=\\.-]*[0-9]){9}|(5[\s=\\.-]*6[\s=\\.-]*1[\s=\\.-]*0)[\s=\\.-]*[0-9](?:[\s=\\.-]*[0-9]){11})

请参见regex demo

在Java字符串文字中使用模式时,请不要忘记将反斜杠加倍:

String part_of_regex = "(3[\\s=\\\\.-]*[47][\\s=\\\\.-]*[0-9](?:[\\s=\\\\.-]*[0-9]){12})|(5[\\s=\\\\.-]*6[\\s=\\\\.-]*0[\\s=\\\\.-]*2[\\s=\\\\.-]*2[\\s=\\\\.-]*[1-5][\\s=\\\\.-]*[0-9](?:[\\s=\\\\.-]*[0-9]){9}|(5[\\s=\\\\.-]*6[\\s=\\\\.-]*1[\\s=\\\\.-]*0)[\\s=\\\\.-]*[0-9](?:[\\s=\\\\.-]*[0-9]){11})";