我有一个很大的Java正则表达式模式,该模式由OR({|
)连接的多个子模式组成。我想在数字之间的任何地方允许多个定界符。
例如,我具有以下模式"(3[47][0-9]{13})|(56022[1-5][0-9]{10}|(5610)[0-9]{12})"
。我如何允许以下定界符:等于({=
),反斜杠(\
),点(.
),连字符(-
)和空格({{ 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})";