Java 负前瞻正则表达式,直到数字,但没有连续的0

Java 负前瞻正则表达式,直到数字,但没有连续的0,java,regex,Java,Regex,我正在提取一个由3-6个数字组成的字符串。但是,我不希望包含超过3个连续0的数字 我现在得到的是一个常规的前瞻,但是如何实现零部分呢 (\d{3,6})[:|\s]{0,2}([a-zA-Z]{3})((?:(?!\d{3,6}).)*) 输入示例: 010113 tee Some text for a 1000 reasons 020113 mee More text 因此,输入的格式为[3-6数字][3字母标识符][message](重复) 我需要它匹配字符串直到020113,而不仅仅是

我正在提取一个由3-6个数字组成的字符串。但是,我不希望包含超过3个连续0的数字

我现在得到的是一个常规的前瞻,但是如何实现零部分呢

(\d{3,6})[:|\s]{0,2}([a-zA-Z]{3})((?:(?!\d{3,6}).)*)
输入示例:

010113 tee Some text for a 1000 reasons 020113 mee More text
因此,输入的格式为
[3-6数字][3字母标识符][message]
(重复)


我需要它匹配字符串直到
020113
,而不仅仅是直到
1000

您可以嵌套前瞻断言:

((?:(?!(?!\d*000)\d{3,6}).)*)
说明:

(#组1中的匹配/捕获:
(?:#开始非捕获组。
(?!#断言不可能匹配。。。
(?!\d*000)#(除非是包含000的数字)
\d{3,6}#这里是三到六位数的数字。
)#展望结束
.#匹配任意字符
)*#结束非捕获组,重复任意次数
)#捕获组1结束

查看。

对于包含超过6位数字的字符串,结果应该是什么?也忽略这一点?字符串已经以6位数字开始了,为什么不在它们之前停止呢?因为我需要那个位,这里的6位数字是日期,但它们可以是3-6位中的任何一位作为日期。我需要将字符串拆分为从一个日期到另一个日期运行的子字符串。现在它也停在1000点。太棒了,谢谢你的详细解释,也谢谢你给我指出那个有用的网站。